changeset 31374:d72d728226dc

propagate from branch 'im.pidgin.pidgin' (head fb4d2b014576462db99d919dea15fbed03f1f48a) to branch 'im.pidgin.pidgin.next.minor' (head 4a5878f91c824f207ed343b57b36ae74e1baa438)
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sun, 13 Mar 2011 18:14:04 +0000 (2011-03-13)
parents 6c660dc7cb6a (current diff) c39838d078e4 (diff)
children 4f2aac5967bb
files ChangeLog ChangeLog.API configure.ac libpurple/account.h libpurple/conversation.c libpurple/conversation.h libpurple/mediamanager.c libpurple/protocols/irc/irc.c libpurple/protocols/irc/irc.h libpurple/protocols/irc/msgs.c libpurple/protocols/irc/parse.c libpurple/protocols/msn/msn.c libpurple/protocols/yahoo/libymsg.c pidgin/gtkblist.c pidgin/gtkconv.c pidgin/gtknotify.c pidgin/gtkutils.c
diffstat 159 files changed, 10320 insertions(+), 8411 deletions(-) [+]
line wrap: on
line diff
--- a/COPYRIGHT	Mon Feb 21 23:08:47 2011 +0000
+++ b/COPYRIGHT	Sun Mar 13 18:14:04 2011 +0000
@@ -49,6 +49,7 @@
 Carlos Bederian
 Dave Bell
 Igor Belyi
+David Benjamin
 Brian Bernas
 Paul Betts
 Runa Bhattacharjee
@@ -98,6 +99,7 @@
 Markos Chandras
 Matthew Chapman
 Christophe Chapuis
+Tirtha Chatterjee
 Patrick Cheung
 Ka-Hing Cheung
 Sadrul Habib Chowdhury
@@ -185,6 +187,7 @@
 Ignacy Gawedzki
 Georgi Georgiev
 Brian Geppert
+Emanuele Giaquinta
 Thomas Gibson-Robinson
 Ike Gingerich
 Gustavo Gir叩ldez
@@ -281,6 +284,7 @@
 Joe LaPenna
 Steve L叩posi
 Daniel Larsson
+Julia Lawall
 Peter Lawler
 Vadim Lebedev
 Ho-seok Lee
@@ -318,6 +322,7 @@
 Lalo Martins
 John Matthews
 Simo Mattila
+Robert Matusewicz
 Michal Matyska
 Ryan McCabe
 Peter McCurdy
@@ -379,6 +384,7 @@
 Riley Patterson
 Havoc Pennington
 Ted Percival
+Hugo Pereira Da Costa
 Eduardo P辿rez
 Matt Perry
 Ani Peter
@@ -389,6 +395,7 @@
 Sebasti叩n E. Peyrott
 Amitakhya Phukan
 Andrea Piccinelli
+Mateusz Pi�kos
 Celso Pinto
 Joao Lu鱈s Marques Pinto
 Aleksander Piotrowski
@@ -397,6 +404,7 @@
 Eric Polino <aluink@gmail.com>
 Ari Pollak
 Stephen Pope
+Cristi Posoiu
 Nathan Poznick
 Jory A. Pratt
 David Preece
@@ -413,6 +421,7 @@
 Etan Reisner
 David Reiss
 Luoh Ren-Shan
+Noa Resare
 Daniele Ricci
 Kristian Rietveld
 Pekka Riikonen
@@ -545,6 +554,7 @@
 Jorge Villase単or (Masca)
 Bjoern Voigt
 Peter Volkov
+Marius Wachtler
 Wan Hing Wah
 Philip Walford
 Nathan Walp
--- a/ChangeLog	Mon Feb 21 23:08:47 2011 +0000
+++ b/ChangeLog	Sun Mar 13 18:14:04 2011 +0000
@@ -9,7 +9,70 @@
 	Pidgin:
 	* Duplicate code cleanup.  (Gabriel Schulhof) (#10599)
 
-version 2.7.10 (??/??/????):
+version 2.7.12 (??/??/????):
+	General:
+	* Implement simple silence suppression for voice calls, preventing wasted
+	  bandwidth for silent periods during a call. (Jakub Adam) (half of #13180)
+
+	Gadu-Gadu:
+	* Allow showing your status only to buddies. (Mateusz Pi�kos) (#13358)
+
+	Windows-Specific Changes:
+	* Fix building libpurple with Visual C++ .NET 2005. This was accidentally
+	  broken in 2.7.11.  Florian Qu竪ze)
+
+version 2.7.11 (03/10/2011):
+	General:
+	* Our bundled libgadu should now build on HP-UX.
+	* Fix some instances of file transfers never completing. (Cristi Posoiu)
+	  (#12472)
+
+	Pidgin:
+	* Sort by Status no longer causes buddies to move around when you
+	  click them.
+	* Fix embedding in the system tray on older GTK+ releases (such as on
+	  CentOS 5.5 and older Fedora).
+	* No longer require libstartup-notification for startup notification
+	  support.  GTK+ has included support for years, so use it instead. (David
+	  Benjamin) (#13245)
+
+	AIM:
+	* Fix a bug where some buddies from your buddy list might not show up.
+	  Affected non-English ICQ users the most. (#13386)
+	* Send keepalives for all types of network connections.  Will hopefully
+	  make chat rooms more reliable. (#1449)
+
+	MSN:
+	* Fix bug that prevented added buddies to your buddy list in certain
+	  circumstances.  (#13298)
+
+	MXit:
+	* MXit plugin and reported client version now follow the libpurple
+	  version.
+	* Don't try to request profile information for non-user contacts.
+	* Allow Re-Invite for contacts in Deleted or Rejected state.
+	* Ensure we don't send packets too fast to the MXit server and trigger
+	  its flood-detection mechanism.  Also increased the internal packet queue
+	  to 32 packets.
+
+	XMPP:
+	* Fix building on platforms with an older glib (inadvertantly broken in
+	  2.7.10).  (#13329)
+	* Don't treat the on-join status storms as 'new arrivals'.  (Thijs
+	  Alkemade) (#a14527)
+	* Extend the /join command to support room JIDs, enabling you to join
+	  a room on any server.  (Solarius, Mat�j Cepl, Tirtha 'wyuka'
+	  Chatterjee) (#4526)
+	* Add support for receiving a limited amount of history when joining a
+	  room (not currently supported by Pidgin and Finch).  (Thijs Alkemade)
+	  (#10986, #a14219)
+
+	Yahoo!/Yahoo! JAPAN:
+	* Fix CVE-2011-1091, denials of service caused by NULL pointer
+	  dereferences due to improper handling of malformed YMSG packets.  Thanks
+	  to Marius Wachtler for reporting this and reviewing the fix!
+
+version 2.7.10 (02/06/2011):
 	General:
 	* Force video sources to all have the same capabilities.  This reduces the
 	  number of times video must be scaled down, saving CPU time. (Jakub Adam)
@@ -41,12 +104,18 @@
 	  Samstag) (#13073)
 	* Fixed bugs in purple_str_to_time() that caused the most recent 'make
 	  check' failures.  (Nader Morshed) (#13131)
+	* Correct an issue that caused some UIs other than Pidgin or Finch to
+	  leave a buddy in the "is typing" state.  (Jan Kaluza)
+	* Fix potential information disclosure issues in the Cipher code.  (Julia
+	  Lawall)
 
 	Pidgin:
 	* Support using the Page Up and Page Down keys on the numeric keypad in
 	  the conversation window.  (Ryan Flegel) (#13127)
 	* Fix a few memory leaks. (Nader Morshed) (#13162)
 	* Support rendering strikethrough when received as in-line CSS. (#13168)
+	* Editable comboboxes are now more friendly to some GTK+ themes. (Hugo
+	  Pereira Da Costa) (#13164).
 
 	Plugins:
 	* The Voice/Video Settings plugin no longer resets selected devices to
@@ -67,6 +136,9 @@
 	  (Nikita Kozlov) (#13136)
 	* Handle Connection: Close headers for BOSH, when the server does not
 	  terminate the connection itself. (#13008)
+	* Improved parsing for DIGEST-MD5, which should resolve issues
+	  connecting to some jabberd2 servers.  This corrects an issue parsing
+	  one-character or empty elements. (Noa Resare) (#a14514)
 
 	Yahoo!/Yahoo! JAPAN:
 	* Fix a crash when an account disconnects before a p2p session is
@@ -305,6 +377,40 @@
 	* Bonjour support now requires Apple Bonjour Print Services version
 	  2.0.0 or newer (http://support.apple.com/kb/dl999).
 
+	libpurple:
+	* Fall back to an ordinary request if a UI does not support showing a
+	  request with an icon.  Fixes receiving MSN file transfer requests
+	  including a thumbnail in Finch.
+
+	Pidgin:
+	* Add support for the Gadu-Gadu protocol in the gevolution plugin to
+	  provide Evolution integration with contacts with GG IDs. (#10709)
+	* Remap the "Set User Mood" shortcut to Control-D, which does not
+	  conflict with the previous shortcut for Get Buddy Info on the
+	  selected buddy.
+	* Add a plugin action menu (under Tools) for the Voice and Video
+	  Settings plugin.
+
+	Finch:
+	* Add support for drop-down account options (like the SILC cipher
+	  and HMAC options or the QQ protocol version).
+
+	XMPP:
+	* Unify the connection security-related settings into one dropdown.
+	* Fix a crash when multiple accounts are simultaneously performing
+	  SASL authentication when built with Cyrus SASL support.  (thanks
+	  to Jan Kaluza) (#11560)
+	* Restore the ability to connect to XMPP servers that do not offer
+	  Stream ID. (#12331)
+	* Added support for using Google's relay servers when making voice and
+	  video calls to Google clients.
+
+	Yahoo/Yahoo JAPAN:
+	* Stop doing unnecessary lookups of certain alias information.  This
+	  solves deadlocks when a given Yahoo account has a ridiculously large
+	  (>500 buddies) list and may improve login speed for those on slow
+	  connections. (#12532)
+
 version 2.7.3 (08/10/2010):
 	General:
 	* Use silent build rules for automake >1.11. You can enable verbose
--- a/ChangeLog.API	Mon Feb 21 23:08:47 2011 +0000
+++ b/ChangeLog.API	Sun Mar 13 18:14:04 2011 +0000
@@ -15,7 +15,28 @@
 		Added:
 		* pidgin_make_scrollable (Gabriel Schulhof) (#10599)
 
-version 2.7.9 (??/??/????):
+version 2.7.12 (??/??/????):
+
+version 2.7.11 (03/10/2011):
+	* libpurple:
+		Added:
+		* Four entries in the GHashTable passed when joining
+		  an XMPP chat room which allow the UI to request a limited
+		  amount of history.  See XEP-0045 7.1.16 for details; the
+		  entries are named history_maxchars, history_maxstanzas,
+		  history_seconds, and history_since.  history_since must be
+		  interpretable by purple_str_to_time, and the prpl takes care
+		  of formatting the time properly.
+	* Perl:
+		Added:
+		* Purple::find_conversation_with_account
+		* Purple::Conversation::Chat::send_with_flags
+		* Purple::Conversation::IM::send_with_flags
+
+version 2.7.10 (02/06/2011):
+	* No changes
+
+version 2.7.9 (12/26/2010):
 	* No changes
 
 version 2.7.8 (12/19/2010):
--- a/Doxyfile.in	Mon Feb 21 23:08:47 2011 +0000
+++ b/Doxyfile.in	Sun Mar 13 18:14:04 2011 +0000
@@ -1,4 +1,4 @@
-# Doxyfile 1.5.3
+# Doxyfile 1.7.1
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project
@@ -14,175 +14,169 @@
 # Project related configuration options
 #---------------------------------------------------------------------------
 
-# This tag specifies the encoding used for all characters in the config file that 
-# follow. The default is UTF-8 which is also the encoding used for all text before 
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into 
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of 
-# possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
 # by quotes) that should identify the project.
 
 PROJECT_NAME           = @PACKAGE@
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
 PROJECT_NUMBER         = @VERSION@
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
 OUTPUT_DIRECTORY       = doc
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
 # otherwise cause performance problems for the file system.
 
 CREATE_SUBDIRS         = NO
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
 
 OUTPUT_LANGUAGE        = English
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
 # Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
 # "represents" "a" "an" "the"
 
-ABBREVIATE_BRIEF       = 
+ABBREVIATE_BRIEF       =
 
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
 # description.
 
 ALWAYS_DETAILED_SEC    = NO
 
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
 # to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
 # path to strip.
 
-STRIP_FROM_PATH        = 
+STRIP_FROM_PATH        =
 
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
 # are normally passed to the compiler using the -I flag.
 
-STRIP_FROM_INC_PATH    = 
+STRIP_FROM_INC_PATH    =
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
 JAVADOC_AUTOBRIEF      = YES
 
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
 # an explicit \brief command for a brief description.)
 
 QT_AUTOBRIEF           = NO
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
 # description. Set this tag to YES if you prefer the old behaviour instead.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
 # re-implements.
 
 INHERIT_DOCS           = YES
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
 # be part of the file/class/namespace that contains it.
 
 SEPARATE_MEMBER_PAGES  = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 4
 
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
 ALIASES                = "signal=- @ref  " \
@@ -195,25 +189,49 @@
                          "endsignals=  " \
                          "constreturn=@note The return value of this function must not be modified or freed. @return  "
 
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
 # of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
-# will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
-# include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this
+# tag. The format is ext=language, where ext is a file extension, and language
+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = NO
@@ -223,266 +241,352 @@
 
 CPP_CLI_SUPPORT        = NO
 
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
 # the \nosubgrouping command.
 
 SUBGROUPING            = YES
 
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = NO
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
 
 EXTRACT_PRIVATE        = NO
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
 EXTRACT_STATIC         = NO
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
 # If set to NO (the default) only methods in the interface are included.
 
 EXTRACT_LOCAL_METHODS  = YES
 
-# If this flag is set to YES, the members of anonymous namespaces will be extracted 
-# and appear in the documentation as a namespace called 'anonymous_namespace{file}', 
-# where file will be replaced with the base name of the file that contains the anonymous 
-# namespace. By default anonymous namespace are hidden.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
 
 EXTRACT_ANON_NSPACES   = NO
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
 # This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
 # overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
 # documentation.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
 # function's detailed documentation block.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
 # Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = NO
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
 
 CASE_SENSE_NAMES       = YES
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
 # documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = NO
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
 # of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
 INLINE_INFO            = YES
 
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
 # declaration order.
 
 SORT_MEMBER_DOCS       = YES
 
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
 # declaration order.
 
 SORT_BRIEF_DOCS        = NO
 
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the 
+# Note: This option applies only to the class list, not to the
 # alphabetical list.
 
 SORT_BY_SCOPE_NAME     = YES
 
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
 # commands in the documentation.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
 # commands in the documentation.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
 # \deprecated commands in the documentation.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# The ENABLED_SECTIONS tag can be used to enable conditional 
+# The ENABLED_SECTIONS tag can be used to enable conditional
 # documentation sections, marked by \if sectionname ... \endif.
 
-ENABLED_SECTIONS       = 
+ENABLED_SECTIONS       =
 
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
 MAX_INITIALIZER_LINES  = 30
 
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
 # list will mention the files that were used to generate the documentation.
 
 SHOW_USED_FILES        = YES
 
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
 # in the documentation. The default is NO.
 
 SHOW_DIRECTORIES       = YES
 
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from the 
-# version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
 # is used as the file version. See the manual for examples.
 
-FILE_VERSION_FILTER    = 
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. The create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE            =
 
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated 
+# The QUIET tag can be used to turn on/off the messages that are generated
 # by doxygen. Possible values are YES and NO. If left blank NO is used.
 
 QUIET                  = NO
 
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
 # NO is used.
 
 WARNINGS               = YES
 
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
 # automatically be disabled.
 
 WARN_IF_UNDOCUMENTED   = NO
 
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
 # don't exist or using markup commands wrongly.
 
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
 # documentation.
 
 WARN_NO_PARAMDOC       = YES
 
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
 # be obtained via FILE_VERSION_FILTER)
 
 WARN_FORMAT            = "$file:$line: $text  "
 
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
 # to stderr.
 
-WARN_LOGFILE           = 
+WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
 INPUT                  = @top_srcdir@/libpurple \
@@ -491,104 +595,109 @@
                          @top_srcdir@/pidgin \
                          @top_srcdir@/doc
 
-# This tag can be used to specify the character encoding of the source files that 
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
-# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
 
 INPUT_ENCODING         = UTF-8
 
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
 
 FILE_PATTERNS          = *.h \
                          *.dox
 
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
 # If left blank NO is used.
 
 RECURSIVE              = NO
 
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
 
 EXCLUDE                = libpurple/purple-client.h \
                          libpurple/purple-client-bindings.h
 
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
 # from the input.
 
 EXCLUDE_SYMLINKS       = NO
 
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       =
 
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the output. 
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, 
-# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
 
-EXCLUDE_SYMBOLS        = 
+EXCLUDE_SYMBOLS        =
 
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
 # the \include command).
 
-EXAMPLE_PATH           = 
+EXAMPLE_PATH           =
 
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
 # blank all files are included.
 
-EXAMPLE_PATTERNS       = 
+EXAMPLE_PATTERNS       =
 
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
 # Possible values are YES and NO. If left blank NO is used.
 
 EXAMPLE_RECURSIVE      = NO
 
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
 # the \image command).
 
-IMAGE_PATH             = 
+IMAGE_PATH             =
 
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
 # ignored.
 
-INPUT_FILTER           = 
+INPUT_FILTER           =
 
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis.  Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match.  The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
 # is applied to all files.
 
-FILTER_PATTERNS        = 
+FILTER_PATTERNS        =
 
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
 
 FILTER_SOURCE_FILES    = NO
@@ -597,34 +706,32 @@
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH 
-# then you must also enable this option. If you don't then doxygen will produce 
-# a warning and turn it on anyway
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
 
 SOURCE_BROWSER         = YES
 
-# Setting the INLINE_SOURCES tag to YES will include the body 
+# Setting the INLINE_SOURCES tag to YES will include the body
 # of functions and classes directly in the documentation.
 
 INLINE_SOURCES         = NO
 
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
 # fragments. Normal C and C++ comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = YES
 
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
 # called/used by that function will be listed.
 
 REFERENCES_RELATION    = YES
@@ -632,20 +739,21 @@
 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
+# link to the source code.
+# Otherwise they will link to the documentation.
 
 REFERENCES_LINK_SOURCE = YES
 
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
 # will need version 4.8.6 or higher.
 
 USE_HTAGS              = NO
 
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
 # which an include is specified. Set to NO to disable this.
 
 VERBATIM_HEADERS       = YES
@@ -654,21 +762,21 @@
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
 # contains a lot of classes, structs, unions or interfaces.
 
 ALPHABETICAL_INDEX     = YES
 
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
 # in which this list will be split (can be a number in the range [1..20])
 
 COLS_IN_ALPHA_INDEX    = 3
 
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
 # should be ignored while generating the index headers.
 
 IGNORE_PREFIX          = Purple \
@@ -679,264 +787,465 @@
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
 # generate HTML output.
 
 GENERATE_HTML          = YES
 
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `html' will be used as the default path.
 
 HTML_OUTPUT            = html
 
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
 # doxygen will generate files with .html extension.
 
 HTML_FILE_EXTENSION    = .html
 
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard header.
 
 HTML_HEADER            = @top_srcdir@/doc/TracHeader.html
 
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard footer.
 
 HTML_FOOTER            = @top_srcdir@/doc/TracFooter.html
 
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
 # stylesheet in the HTML output directory as well, or it will be erased!
 
-HTML_STYLESHEET        = 
+HTML_STYLESHEET        =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the stylesheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT    = 100
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
 # NO a bullet list will be used.
 
 HTML_ALIGN_MEMBERS     = YES
 
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = YES
 
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
 # written to the html output directory.
 
-CHM_FILE               = 
+CHM_FILE               =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
 # the HTML help compiler on the generated index.hhp.
 
-HHC_LOCATION           = 
+HHC_LOCATION           =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
 # it should be included in the master .chm file (NO).
 
 GENERATE_CHI           = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
 
 BINARY_TOC             = NO
 
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
 # to the contents of the HTML help documentation and to the tree view.
 
 TOC_EXPAND             = YES
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
 # the value YES disables it.
 
 DISABLE_INDEX          = NO
 
-# This tag can be used to set the number of enum values (range [1..20]) 
+# This tag can be used to set the number of enum values (range [1..20])
 # that doxygen will group on one line in the generated HTML documentation.
 
 ENUM_VALUES_PER_LINE   = 4
 
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
 
 GENERATE_TREEVIEW      = YES
 
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
 
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT    = YES
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a PHP enabled web server instead of at the web client
+# using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server
+# based approach is that it scales better to large projects and allows
+# full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
 GENERATE_LATEX         = NO
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `latex' will be used as the default path.
 
 LATEX_OUTPUT           = latex
 
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
 # invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
 
 LATEX_CMD_NAME         = latex
 
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
 # default command name.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_LATEX          = NO
 
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
 # packages that should be included in the LaTeX output.
 
-EXTRA_PACKAGES         = 
+EXTRA_PACKAGES         =
 
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
 # standard header. Notice: only use this tag if you know what you are doing!
 
-LATEX_HEADER           = 
+LATEX_HEADER           =
 
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
 # This makes the output suitable for online browsing using a pdf viewer.
 
 PDF_HYPERLINKS         = NO
 
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
 # higher quality PDF documentation.
 
 USE_PDFLATEX           = NO
 
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
 # This option is also used when generating formulas in HTML.
 
 LATEX_BATCHMODE        = NO
 
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
 # in the output.
 
 LATEX_HIDE_INDICES     = NO
 
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
 #---------------------------------------------------------------------------
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
 # other RTF readers or editors.
 
 GENERATE_RTF           = NO
 
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `rtf' will be used as the default path.
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_RTF            = NO
 
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
 # Note: wordpad (write) and others do not support links.
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
-RTF_STYLESHEET_FILE    = 
+RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document. 
+# Set optional variables used in the generation of an rtf document.
 # Syntax is similar to doxygen's config file.
 
-RTF_EXTENSIONS_FILE    = 
+RTF_EXTENSIONS_FILE    =
 
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
 GENERATE_MAN           = NO
 
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `man' will be used as the default path.
 
 MAN_OUTPUT             = man
 
-# The MAN_EXTENSION tag determines the extension that is added to 
+# The MAN_EXTENSION tag determines the extension that is added to
 # the generated man pages (default is the subroutine's section .3)
 
 MAN_EXTENSION          = .3
 
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
 # would be unable to find the correct page. The default is NO.
 
 MAN_LINKS              = NO
@@ -945,33 +1254,33 @@
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
 # the code including all documentation.
 
 GENERATE_XML           = YES
 
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `xml' will be used as the default path.
 
 XML_OUTPUT             = xml
 
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_SCHEMA             = 
+XML_SCHEMA             =
 
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_DTD                = 
+XML_DTD                =
 
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
 # enabling this will significantly increase the size of the XML output.
 
 XML_PROGRAMLISTING     = YES
@@ -980,10 +1289,10 @@
 # configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
 # and incomplete at the moment.
 
 GENERATE_AUTOGEN_DEF   = NO
@@ -992,319 +1301,346 @@
 # configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
 # moment.
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
 # to generate PDF and DVI output from the Perl module output.
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
 # and Perl will parse it just the same.
 
 PERLMOD_PRETTY         = YES
 
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
 # Makefile don't overwrite each other's variables.
 
-PERLMOD_MAKEVAR_PREFIX = 
+PERLMOD_MAKEVAR_PREFIX =
 
 #---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
+# Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
 # files.
 
 ENABLE_PREPROCESSING   = YES
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
 # way by setting EXPAND_ONLY_PREDEF to YES.
 
 MACRO_EXPANSION        = NO
 
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
 # PREDEFINED and EXPAND_AS_DEFINED tags.
 
 EXPAND_ONLY_PREDEF     = NO
 
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
 # in the INCLUDE_PATH (see below) will be search if a #include is found.
 
 SEARCH_INCLUDES        = YES
 
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
 # the preprocessor.
 
-INCLUDE_PATH           = 
+INCLUDE_PATH           =
 
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
 # be used.
 
-INCLUDE_FILE_PATTERNS  = 
+INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
 # instead of the = operator.
 
-PREDEFINED             = 
+PREDEFINED             =
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
 # Use the PREDEFINED tag if you want to use a different macro definition.
 
-EXPAND_AS_DEFINED      = 
+EXPAND_AS_DEFINED      =
 
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
 # the parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references   
+# Configuration::additions related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
 # does not have to be run to correct the links.
 # Note that each tag file must have a unique name
 # (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen 
+# If a tag file is not located in the directory in which doxygen
 # is run, you must also specify the path to the tagfile here.
 
-TAGFILES               = 
+TAGFILES               =
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
 # a tag file that is based on the input files it reads.
 
-GENERATE_TAGFILE       = 
+GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
 # will be listed.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
 # be listed.
 
 EXTERNAL_GROUPS        = YES
 
-# The PERL_PATH should be the absolute path and name of the perl script 
+# The PERL_PATH should be the absolute path and name of the perl script
 # interpreter (i.e. the result of `which perl').
 
 PERL_PATH              = /usr/bin/perl
 
 #---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
+# Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
 # powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to 
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to 
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to 
-# be found in the default search path.
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
 
-MSCGEN_PATH            = 
+MSCGEN_PATH            =
 
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
 # or is not a class.
 
 HIDE_UNDOC_RELATIONS   = YES
 
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
 # have no effect if this option is set to NO (the default)
 
 HAVE_DOT               = @enable_dot@
 
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS        = 0
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME           = FreeSans.ttf
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
 # the CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
 # class references variables) of the class with other documented classes.
 
 COLLABORATION_GRAPH    = YES
 
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for groups, showing the direct groups dependencies
 
 GROUP_GRAPHS           = YES
 
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
 
 UML_LOOK               = YES
 
-# If set to YES, the inheritance and collaboration graphs will show the 
+# If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
 TEMPLATE_RELATIONS     = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
 # other documented files.
 
 INCLUDE_GRAPH          = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
 # indirectly include this file.
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
-# generate a call dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable call graphs for selected 
-# functions only using the \callgraph command.
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
 
 CALL_GRAPH             = YES
 
-# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
-# generate a caller dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable caller graphs for selected 
-# functions only using the \callergraph command.
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
 
 CALLER_GRAPH           = NO
 
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
 # will graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
 # in a graphical way. The dependency relations are determined by the #include
 # relations between the files in the directories.
 
 DIRECTORY_GRAPH        = YES
 
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
 # generated by dot. Possible values are png, jpg, or gif
 # If left blank png will be used.
 
 DOT_IMAGE_FORMAT       = png
 
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
 
-DOT_PATH               = 
+DOT_PATH               =
 
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
 # \dotfile command).
 
-DOTFILE_DIRS           = 
+DOTFILE_DIRS           =
 
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the number 
-# of direct children of the root node in a graph is already larger than 
-# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note 
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 
 DOT_GRAPH_MAX_NODES    = 50
 
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 
 MAX_DOT_GRAPH_DEPTH    = 2
 
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, which results in a white background. 
-# Warning: Depending on the platform used, enabling this option may lead to 
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
-# read).
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
 
 DOT_TRANSPARENT        = NO
 
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
 # support this, this feature is disabled by default.
 
 DOT_MULTI_TARGETS      = YES
 
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
 # arrows in the dot generated graphs.
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
 # the various graphs.
 
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = YES
--- a/NEWS	Mon Feb 21 23:08:47 2011 +0000
+++ b/NEWS	Sun Mar 13 18:14:04 2011 +0000
@@ -2,7 +2,18 @@
 
 Our development blog is available at: http://planet.pidgin.im
 
-2.7.10 (??/??/????):
+2.7.12 (??/??/????):
+
+2.7.11 (03/10/2011):
+	John: Yet another release.  This time around we finally fixed that
+	annoying MSN buddy adding problem and a security issue in Yahoo.  You
+	know the drill--upgrade already!
+
+2.7.10 (02/06/2011):
+	John: It's release time again.  This release contains a bunch of stuff
+	committed from Trac.  This is another "thank a patch writer" release.
+	Unfortunately, no one has fixed our wonderful MSN issues yet.  There is
+	a tiny security fix in this release, as well.
 
 2.7.9 (12/26/2010):
 	John: Just a quick release for a security fix here.  Elliott has not
--- a/configure.ac	Mon Feb 21 23:08:47 2011 +0000
+++ b/configure.ac	Sun Mar 13 18:14:04 2011 +0000
@@ -55,7 +55,7 @@
 m4_define([gnt_lt_current], [8])
 m4_define([gnt_major_version], [2])
 m4_define([gnt_minor_version], [8])
-m4_define([gnt_micro_version], [6])
+m4_define([gnt_micro_version], [8])
 m4_define([gnt_version_suffix], [devel])
 m4_define([gnt_version],
           [gnt_major_version.gnt_minor_version.gnt_micro_version])
@@ -263,6 +263,31 @@
 	AC_MSG_RESULT(no)
 ])
 
+# before gettexting, in case iconv matters
+case "$host_os" in
+darwin*)
+	AC_CHECK_LIB(resolv, res_query)
+
+	AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h, [
+		AC_CHECK_HEADER(IOKit/IOKitLib.h, [
+			AC_DEFINE(HAVE_IOKIT, 1, [Define if we have IOKit])
+			LIBS="$LIBS -framework IOKit -framework CoreFoundation"
+		], [])
+	], [])
+
+	AC_MSG_CHECKING([for fink])
+	if test -d /sw; then
+		AC_MSG_RESULT([found, adding /sw to search paths])
+		CPPFLAGS="$CPPFLAGS -I/sw/include"
+		LDFLAGS="$LDFLAGS -L/sw/lib"
+	else
+		AC_MSG_RESULT([not found])
+	fi
+	;;
+*)
+	;;
+esac
+
 dnl #######################################################################
 dnl # Disable creation and installation of translation files
 dnl #######################################################################
@@ -273,32 +298,6 @@
 	GETTEXT_PACKAGE=pidgin
 	AC_SUBST(GETTEXT_PACKAGE)
 
-
-	# before gettexting, in case iconv matters
-	case "$host_os" in
-	darwin*)
-		AC_CHECK_LIB(resolv, res_query)
-
-		AC_CHECK_HEADER(CoreFoundation/CoreFoundation.h, [
-			AC_CHECK_HEADER(IOKit/IOKitLib.h, [
-				AC_DEFINE(HAVE_IOKIT, 1, [Define if we have IOKit])
-				LIBS="$LIBS -framework IOKit -framework CoreFoundation"
-			], [])
-		], [])
-
-		AC_MSG_CHECKING([for fink])
-		if test -d /sw; then
-			AC_MSG_RESULT([found, adding /sw to search paths])
-			CPPFLAGS="$CPPFLAGS -I/sw/include"
-			LDFLAGS="$LDFLAGS -L/sw/lib"
-		else
-			AC_MSG_RESULT([not found])
-		fi
-		;;
-	*)
-		;;
-	esac
-
 	ALL_LINGUAS="af am ar az be@latin bg bn bn_IN bs ca ca@valencia cs da de dz el en_AU en_CA en_GB eo es et eu fa fi fr ga gl gu he hi hu hy id it ja ka km kn ko ku lo lt mai mhr mk mn mr ms_MY my_MM nb ne nl nn oc or pa pl pt_BR pt ps ro ru si sk sl sq sr sr@latin sv sw ta te th tr uk ur vi xh zh_CN zh_HK zh_TW"
 	AM_GLIB_GNU_GETTEXT
 
@@ -541,27 +540,6 @@
 	fi
 
 	dnl #######################################################################
-	dnl # Check for startup notification
-	dnl #######################################################################
-	if test "x$enable_startup_notification" = "xyes"; then
-		PKG_CHECK_MODULES(STARTUP_NOTIFICATION, [libstartup-notification-1.0 >= 0.5], , [
-			AC_MSG_RESULT(no)
-			enable_startup_notification="no"
-			if test "x$force_deps" = "xyes" ; then
-				AC_MSG_ERROR([
-Startup notification development headers not found.
-Use --disable-startup-notification if you do not need it.
-])
-			fi])
-
-		if test "x$enable_startup_notification" = "xyes"; then
-			AC_DEFINE(HAVE_STARTUP_NOTIFICATION, 1, [Define if we're using libstartup-notification.])
-			AC_SUBST(STARTUP_NOTIFICATION_CFLAGS)
-			AC_SUBST(STARTUP_NOTIFICATION_LIBS)
-		fi
-	fi
-
-	dnl #######################################################################
 	dnl # Check for GtkSpell
 	dnl #######################################################################
 	if test "x$enable_gtkspell" = "xyes" ; then
@@ -2575,6 +2553,7 @@
 		   pidgin/plugins/perl/Makefile
 		   pidgin/plugins/perl/common/Makefile.PL
 		   pidgin/plugins/ticker/Makefile
+		   libpurple/ciphers/Makefile
 		   libpurple/example/Makefile
 		   libpurple/gconf/Makefile
 		   libpurple/purple.pc
--- a/libpurple/Makefile.am	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -32,7 +32,7 @@
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = purple.pc
 
-SUBDIRS = $(GCONF_DIR) plugins protocols . tests example
+SUBDIRS = $(GCONF_DIR) plugins protocols ciphers . tests example
 
 purple_coresources = \
 	account.c \
@@ -311,6 +311,7 @@
 	$(GSTREAMER_LIBS) \
 	$(GSTINTERFACES_LIBS) \
 	$(IDN_LIBS) \
+	ciphers/libpurple-ciphers.la \
 	-lm
 
 AM_CPPFLAGS = \
--- a/libpurple/Makefile.mingw	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/Makefile.mingw	Sun Mar 13 18:14:04 2011 +0000
@@ -35,6 +35,14 @@
 			buddyicon.c \
 			certificate.c \
 			cipher.c \
+			ciphers/des.c \
+			ciphers/gchecksum.c \
+			ciphers/hmac.c \
+			ciphers/md4.c \
+			ciphers/md5.c \
+			ciphers/rc4.c \
+			ciphers/sha1.c \
+			ciphers/sha256.c \
 			circbuffer.c \
 			cmds.c \
 			connection.c \
--- a/libpurple/account.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/account.h	Sun Mar 13 18:14:04 2011 +0000
@@ -153,6 +153,7 @@
 	 * buddies are added to your permit list.  Currently we have to
 	 * iterate through the entire list if we want to check if someone
 	 * is permitted or denied.  We should do this for 3.0.0.
+	 * Or maybe use a GTree.
 	 */
 	GSList *permit;             /**< Permit list.                           */
 	GSList *deny;               /**< Deny list.                             */
--- a/libpurple/cipher.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/cipher.c	Sun Mar 13 18:14:04 2011 +0000
@@ -5,23 +5,6 @@
  * to list here.  Please refer to the COPYRIGHT file distributed with this
  * source distribution.
  *
- * Original md5
- * Copyright (C) 2001-2003  Christophe Devine <c.devine@cr0.net>
- *
- * Original md4 taken from linux kernel
- * MD4 Message Digest Algorithm (RFC1320).
- *
- * Implementation derived from Andrew Tridgell and Steve French's
- * CIFS MD4 implementation, and the cryptoapi implementation
- * originally based on the public domain implementation written
- * by Colin Plumb in 1993.
- *
- * Copyright (c) Andrew Tridgell 1997-1998.
- * Modified by Steve French (sfrench@us.ibm.com) 2002
- * Copyright (c) Cryptoapi developers.
- * Copyright (c) 2002 David S. Miller (davem@redhat.com)
- * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
- *
  * Original des taken from gpg
  *
  * des.c - DES and Triple-DES encryption/decryption Algorithm
@@ -57,2454 +40,6 @@
 #include "signals.h"
 #include "value.h"
 
-#if GLIB_CHECK_VERSION(2,16,0)
-static void
-purple_g_checksum_init(PurpleCipherContext *context, GChecksumType type)
-{
-	GChecksum *checksum;
-
-	checksum = g_checksum_new(type);
-	purple_cipher_context_set_data(context, checksum);
-}
-
-static void
-purple_g_checksum_reset(PurpleCipherContext *context, GChecksumType type)
-{
-	GChecksum *checksum;
-
-	checksum = purple_cipher_context_get_data(context);
-	g_return_if_fail(checksum != NULL);
-
-#if GLIB_CHECK_VERSION(2,18,0)
-	g_checksum_reset(checksum);
-#else
-	g_checksum_free(checksum);
-	checksum = g_checksum_new(type);
-	purple_cipher_context_set_data(context, checksum);
-#endif
-}
-
-static void
-purple_g_checksum_uninit(PurpleCipherContext *context)
-{
-	GChecksum *checksum;
-
-	checksum = purple_cipher_context_get_data(context);
-	g_return_if_fail(checksum != NULL);
-
-	g_checksum_free(checksum);
-}
-
-static void
-purple_g_checksum_append(PurpleCipherContext *context, const guchar *data,
-                         gsize len)
-{
-	GChecksum *checksum;
-
-	checksum = purple_cipher_context_get_data(context);
-	g_return_if_fail(checksum != NULL);
-
-	while (len >= G_MAXSSIZE) {
-		g_checksum_update(checksum, data, G_MAXSSIZE);
-		len -= G_MAXSSIZE;
-		data += G_MAXSSIZE;
-	}
-
-	if (len)
-		g_checksum_update(checksum, data, len);
-}
-
-static gboolean
-purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type,
-                         gsize len, guchar *digest, gsize *out_len)
-{
-	GChecksum *checksum;
-	const gssize required_length = g_checksum_type_get_length(type);
-
-	checksum = purple_cipher_context_get_data(context);
-
-	g_return_val_if_fail(len >= required_length, FALSE);
-	g_return_val_if_fail(checksum != NULL, FALSE);
-
-	g_checksum_get_digest(checksum, digest, &len);
-
-	purple_cipher_context_reset(context, NULL);
-
-	if (out_len)
-		*out_len = len;
-
-	return TRUE;
-}
-#endif
-
-
-/*******************************************************************************
- * MD5
- ******************************************************************************/
-#define MD5_HMAC_BLOCK_SIZE	64
-
-static size_t
-md5_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return MD5_HMAC_BLOCK_SIZE;
-}
-
-#if GLIB_CHECK_VERSION(2,16,0)
-
-static void
-md5_init(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_init(context, G_CHECKSUM_MD5);
-}
-
-static void
-md5_reset(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_reset(context, G_CHECKSUM_MD5);
-}
-
-static gboolean
-md5_digest(PurpleCipherContext *context, gsize in_len, guchar digest[16],
-           size_t *out_len)
-{
-	return purple_g_checksum_digest(context, G_CHECKSUM_MD5, in_len,
-	                                digest, out_len);
-}
-
-static PurpleCipherOps MD5Ops = {
-	NULL,			/* Set Option		*/
-	NULL,			/* Get Option		*/
-	md5_init,		/* init				*/
-	md5_reset,		/* reset			*/
-	purple_g_checksum_uninit,	/* uninit			*/
-	NULL,			/* set iv			*/
-	purple_g_checksum_append,	/* append			*/
-	md5_digest,		/* digest			*/
-	NULL,			/* encrypt			*/
-	NULL,			/* decrypt			*/
-	NULL,			/* set salt			*/
-	NULL,			/* get salt size	*/
-	NULL,			/* set key			*/
-	NULL,			/* get key size		*/
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	md5_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#else /* GLIB_CHECK_VERSION(2,16,0) */
-
-struct MD5Context {
-	guint32 total[2];
-	guint32 state[4];
-	guchar buffer[64];
-};
-
-#define MD5_GET_GUINT32(n,b,i) {			\
-	(n) = ((guint32)(b) [(i)    ]      )	\
-		| ((guint32)(b) [(i) + 1] <<  8)	\
-		| ((guint32)(b) [(i) + 2] << 16)	\
-		| ((guint32)(b) [(i) + 3] << 24);	\
-}
-#define MD5_PUT_GUINT32(n,b,i) {			\
-	(b)[(i)    ] = (guchar)((n)      );		\
-	(b)[(i) + 1] = (guchar)((n) >>  8);		\
-	(b)[(i) + 2] = (guchar)((n) >> 16);		\
-	(b)[(i) + 3] = (guchar)((n) >> 24);		\
-}
-
-static void
-md5_init(PurpleCipherContext *context, gpointer extra) {
-	struct MD5Context *md5_context;
-
-	md5_context = g_new0(struct MD5Context, 1);
-
-	purple_cipher_context_set_data(context, md5_context);
-
-	purple_cipher_context_reset(context, extra);
-}
-
-static void
-md5_reset(PurpleCipherContext *context, gpointer extra) {
-	struct MD5Context *md5_context;
-
-	md5_context = purple_cipher_context_get_data(context);
-
-	md5_context->total[0] = 0;
-	md5_context->total[1] = 0;
-
-	md5_context->state[0] = 0x67452301;
-	md5_context->state[1] = 0xEFCDAB89;
-	md5_context->state[2] = 0x98BADCFE;
-	md5_context->state[3] = 0x10325476;
-
-	memset(md5_context->buffer, 0, sizeof(md5_context->buffer));
-}
-
-static void
-md5_uninit(PurpleCipherContext *context) {
-	struct MD5Context *md5_context;
-
-	purple_cipher_context_reset(context, NULL);
-
-	md5_context = purple_cipher_context_get_data(context);
-	memset(md5_context, 0, sizeof(md5_context));
-
-	g_free(md5_context);
-	md5_context = NULL;
-}
-
-static void
-md5_process(struct MD5Context *md5_context, const guchar data[64]) {
-	guint32 X[16], A, B, C, D;
-
-	A = md5_context->state[0];
-	B = md5_context->state[1];
-	C = md5_context->state[2];
-	D = md5_context->state[3];
-
-	MD5_GET_GUINT32(X[ 0], data,  0);
-	MD5_GET_GUINT32(X[ 1], data,  4);
-	MD5_GET_GUINT32(X[ 2], data,  8);
-	MD5_GET_GUINT32(X[ 3], data, 12);
-	MD5_GET_GUINT32(X[ 4], data, 16);
-	MD5_GET_GUINT32(X[ 5], data, 20);
-	MD5_GET_GUINT32(X[ 6], data, 24);
-	MD5_GET_GUINT32(X[ 7], data, 28);
-	MD5_GET_GUINT32(X[ 8], data, 32);
-	MD5_GET_GUINT32(X[ 9], data, 36);
-	MD5_GET_GUINT32(X[10], data, 40);
-	MD5_GET_GUINT32(X[11], data, 44);
-	MD5_GET_GUINT32(X[12], data, 48);
-	MD5_GET_GUINT32(X[13], data, 52);
-	MD5_GET_GUINT32(X[14], data, 56);
-	MD5_GET_GUINT32(X[15], data, 60);
-
-	#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
-	#define P(a,b,c,d,k,s,t) {		\
-		a += F(b,c,d) + X[k] + t;	\
-		a = S(a,s) + b;				\
-	}
-
-	/* first pass */
-	#define F(x,y,z) (z ^ (x & (y ^ z)))
-	P(A, B, C, D,  0,  7, 0xD76AA478);
-	P(D, A, B, C,  1, 12, 0xE8C7B756);
-	P(C, D, A, B,  2, 17, 0x242070DB);
-	P(B, C, D, A,  3, 22, 0xC1BDCEEE);
-	P(A, B, C, D,  4,  7, 0xF57C0FAF);
-	P(D, A, B, C,  5, 12, 0x4787C62A);
-	P(C, D, A, B,  6, 17, 0xA8304613);
-	P(B, C, D, A,  7, 22, 0xFD469501);
-	P(A, B, C, D,  8,  7, 0x698098D8);
-	P(D, A, B, C,  9, 12, 0x8B44F7AF);
-	P(C, D, A, B, 10, 17, 0xFFFF5BB1);
-	P(B, C, D, A, 11, 22, 0x895CD7BE);
-	P(A, B, C, D, 12,  7, 0x6B901122);
-	P(D, A, B, C, 13, 12, 0xFD987193);
-	P(C, D, A, B, 14, 17, 0xA679438E);
-	P(B, C, D, A, 15, 22, 0x49B40821);
-	#undef F
-
-	/* second pass */
-	#define F(x,y,z) (y ^ (z & (x ^ y)))
-	P(A, B, C, D,  1,  5, 0xF61E2562);
-	P(D, A, B, C,  6,  9, 0xC040B340);
-	P(C, D, A, B, 11, 14, 0x265E5A51);
-	P(B, C, D, A,  0, 20, 0xE9B6C7AA);
-	P(A, B, C, D,  5,  5, 0xD62F105D);
-	P(D, A, B, C, 10,  9, 0x02441453);
-	P(C, D, A, B, 15, 14, 0xD8A1E681);
-	P(B, C, D, A,  4, 20, 0xE7D3FBC8);
-	P(A, B, C, D,  9,  5, 0x21E1CDE6);
-	P(D, A, B, C, 14,  9, 0xC33707D6);
-	P(C, D, A, B,  3, 14, 0xF4D50D87);
-	P(B, C, D, A,  8, 20, 0x455A14ED);
-	P(A, B, C, D, 13,  5, 0xA9E3E905);
-	P(D, A, B, C,  2,  9, 0xFCEFA3F8);
-	P(C, D, A, B,  7, 14, 0x676F02D9);
-	P(B, C, D, A, 12, 20, 0x8D2A4C8A);
-	#undef F
-
-	/* third pass */
-	#define F(x,y,z) (x ^ y ^ z)
-	P(A, B, C, D,  5,  4, 0xFFFA3942);
-	P(D, A, B, C,  8, 11, 0x8771F681);
-	P(C, D, A, B, 11, 16, 0x6D9D6122);
-	P(B, C, D, A, 14, 23, 0xFDE5380C);
-	P(A, B, C, D,  1,  4, 0xA4BEEA44);
-	P(D, A, B, C,  4, 11, 0x4BDECFA9);
-	P(C, D, A, B,  7, 16, 0xF6BB4B60);
-	P(B, C, D, A, 10, 23, 0xBEBFBC70);
-	P(A, B, C, D, 13,  4, 0x289B7EC6);
-	P(D, A, B, C,  0, 11, 0xEAA127FA);
-	P(C, D, A, B,  3, 16, 0xD4EF3085);
-	P(B, C, D, A,  6, 23, 0x04881D05);
-	P(A, B, C, D,  9,  4, 0xD9D4D039);
-	P(D, A, B, C, 12, 11, 0xE6DB99E5);
-	P(C, D, A, B, 15, 16, 0x1FA27CF8);
-	P(B, C, D, A,  2, 23, 0xC4AC5665);
-	#undef F
-
-	/* forth pass */
-	#define F(x,y,z) (y ^ (x | ~z))
-	P(A, B, C, D,  0,  6, 0xF4292244);
-	P(D, A, B, C,  7, 10, 0x432AFF97);
-	P(C, D, A, B, 14, 15, 0xAB9423A7);
-	P(B, C, D, A,  5, 21, 0xFC93A039);
-	P(A, B, C, D, 12,  6, 0x655B59C3);
-	P(D, A, B, C,  3, 10, 0x8F0CCC92);
-	P(C, D, A, B, 10, 15, 0xFFEFF47D);
-	P(B, C, D, A,  1, 21, 0x85845DD1);
-	P(A, B, C, D,  8,  6, 0x6FA87E4F);
-	P(D, A, B, C, 15, 10, 0xFE2CE6E0);
-	P(C, D, A, B,  6, 15, 0xA3014314);
-	P(B, C, D, A, 13, 21, 0x4E0811A1);
-	P(A, B, C, D,  4,  6, 0xF7537E82);
-	P(D, A, B, C, 11, 10, 0xBD3AF235);
-	P(C, D, A, B,  2, 15, 0x2AD7D2BB);
-	P(B, C, D, A,  9, 21, 0xEB86D391);
-	#undef F
-	#undef P
-	#undef S
-
-	md5_context->state[0] += A;
-	md5_context->state[1] += B;
-	md5_context->state[2] += C;
-	md5_context->state[3] += D;
-}
-
-static void
-md5_append(PurpleCipherContext *context, const guchar *data, size_t len) {
-	struct MD5Context *md5_context = NULL;
-	guint32 left = 0, fill = 0;
-
-	g_return_if_fail(context != NULL);
-
-	md5_context = purple_cipher_context_get_data(context);
-	g_return_if_fail(md5_context != NULL);
-
-	left = md5_context->total[0] & 0x3F;
-	fill = 64 - left;
-
-	md5_context->total[0] += len;
-	md5_context->total[0] &= 0xFFFFFFFF;
-
-	if(md5_context->total[0] < len)
-		md5_context->total[1]++;
-
-	if(left && len >= fill) {
-		memcpy((md5_context->buffer + left), data, fill);
-		md5_process(md5_context, md5_context->buffer);
-		len -= fill;
-		data += fill;
-		left = 0;
-	}
-
-	while(len >= 64) {
-		md5_process(md5_context, data);
-		len -= 64;
-		data += 64;
-	}
-
-	if(len) {
-		memcpy((md5_context->buffer + left), data, len);
-	}
-}
-
-static gboolean
-md5_digest(PurpleCipherContext *context, size_t in_len, guchar digest[16],
-		   size_t *out_len)
-{
-	struct MD5Context *md5_context = NULL;
-	guint32 last, pad;
-	guint32 high, low;
-	guchar message[8];
-	guchar padding[64] = {
-		0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	};
-
-	g_return_val_if_fail(in_len >= 16, FALSE);
-
-	md5_context = purple_cipher_context_get_data(context);
-
-	high = (md5_context->total[0] >> 29)
-		 | (md5_context->total[1] << 3);
-	low = (md5_context->total[0] << 3);
-
-	MD5_PUT_GUINT32(low, message, 0);
-	MD5_PUT_GUINT32(high, message, 4);
-
-	last = md5_context->total[0] & 0x3F;
-	pad = (last < 56) ? (56 - last) : (120 - last);
-
-	md5_append(context, padding, pad);
-	md5_append(context, message, 8);
-
-	MD5_PUT_GUINT32(md5_context->state[0], digest, 0);
-	MD5_PUT_GUINT32(md5_context->state[1], digest, 4);
-	MD5_PUT_GUINT32(md5_context->state[2], digest, 8);
-	MD5_PUT_GUINT32(md5_context->state[3], digest, 12);
-
-	if(out_len)
-		*out_len = 16;
-
-	return TRUE;
-}
-
-static PurpleCipherOps MD5Ops = {
-	NULL,			/* Set option */
-	NULL,			/* Get option */
-	md5_init,		/* init */
-	md5_reset,		/* reset */
-	md5_uninit,		/* uninit */
-	NULL,			/* set iv */
-	md5_append,		/* append */
-	md5_digest,		/* digest */
-	NULL,			/* encrypt */
-	NULL,			/* decrypt */
-	NULL,			/* set salt */
-	NULL,			/* get salt size */
-	NULL,			/* set key */
-	NULL,			/* get key size */
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	md5_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#endif /* GLIB_CHECK_VERSION(2,16,0) */
-
-/*******************************************************************************
- * MD4
- ******************************************************************************/
-#define MD4_DIGEST_SIZE		16
-#define MD4_HMAC_BLOCK_SIZE	64
-#define MD4_BLOCK_WORDS		16
-#define MD4_HASH_WORDS		4
-
-
-
-struct MD4_Context {
-	guint32 hash[MD4_HASH_WORDS];
-	guint32 block[MD4_BLOCK_WORDS];
-	guint64 byte_count;
-};
-
-static inline guint32 lshift(guint32 x, unsigned int s)
-{
-	x &= 0xFFFFFFFF;
-	return ((x << s) & 0xFFFFFFFF) | (x >> (32 - s));
-}
-
-static inline guint32 F(guint32 x, guint32 y, guint32 z)
-{
-	return (x & y) | ((~x) & z);
-}
-
-static inline guint32 G(guint32 x, guint32 y, guint32 z)
-{
-	return (x & y) | (x & z) | (y & z);
-}
-
-static inline guint32 H(guint32 x, guint32 y, guint32 z)
-{
-	return x ^ y ^ z;
-}
-
-#define ROUND1(a,b,c,d,k,s) (a = lshift(a + F(b,c,d) + k, s))
-#define ROUND2(a,b,c,d,k,s) (a = lshift(a + G(b,c,d) + k + (guint32)0x5A827999,s))
-#define ROUND3(a,b,c,d,k,s) (a = lshift(a + H(b,c,d) + k + (guint32)0x6ED9EBA1,s))
-
-static inline void le32_to_cpu_array(guint32 *buf, unsigned int words)
-{
-	while (words--) {
-		*buf=GUINT_FROM_LE(*buf);
-		buf++;
-	}
-}
-
-static inline void cpu_to_le32_array(guint32 *buf, unsigned int words)
-{
-	while (words--) {
-		*buf=GUINT_TO_LE(*buf);
-		buf++;
-	}
-}
-
-static void md4_transform(guint32 *hash, guint32 const *in)
-{
-	guint32 a, b, c, d;
-
-	a = hash[0];
-	b = hash[1];
-	c = hash[2];
-	d = hash[3];
-
-	ROUND1(a, b, c, d, in[0], 3);
-	ROUND1(d, a, b, c, in[1], 7);
-	ROUND1(c, d, a, b, in[2], 11);
-	ROUND1(b, c, d, a, in[3], 19);
-	ROUND1(a, b, c, d, in[4], 3);
-	ROUND1(d, a, b, c, in[5], 7);
-	ROUND1(c, d, a, b, in[6], 11);
-	ROUND1(b, c, d, a, in[7], 19);
-	ROUND1(a, b, c, d, in[8], 3);
-	ROUND1(d, a, b, c, in[9], 7);
-	ROUND1(c, d, a, b, in[10], 11);
-	ROUND1(b, c, d, a, in[11], 19);
-	ROUND1(a, b, c, d, in[12], 3);
-	ROUND1(d, a, b, c, in[13], 7);
-	ROUND1(c, d, a, b, in[14], 11);
-	ROUND1(b, c, d, a, in[15], 19);
-
-	ROUND2(a, b, c, d,in[ 0], 3);
-	ROUND2(d, a, b, c, in[4], 5);
-	ROUND2(c, d, a, b, in[8], 9);
-	ROUND2(b, c, d, a, in[12], 13);
-	ROUND2(a, b, c, d, in[1], 3);
-	ROUND2(d, a, b, c, in[5], 5);
-	ROUND2(c, d, a, b, in[9], 9);
-	ROUND2(b, c, d, a, in[13], 13);
-	ROUND2(a, b, c, d, in[2], 3);
-	ROUND2(d, a, b, c, in[6], 5);
-	ROUND2(c, d, a, b, in[10], 9);
-	ROUND2(b, c, d, a, in[14], 13);
-	ROUND2(a, b, c, d, in[3], 3);
-	ROUND2(d, a, b, c, in[7], 5);
-	ROUND2(c, d, a, b, in[11], 9);
-	ROUND2(b, c, d, a, in[15], 13);
-
-	ROUND3(a, b, c, d,in[ 0], 3);
-	ROUND3(d, a, b, c, in[8], 9);
-	ROUND3(c, d, a, b, in[4], 11);
-	ROUND3(b, c, d, a, in[12], 15);
-	ROUND3(a, b, c, d, in[2], 3);
-	ROUND3(d, a, b, c, in[10], 9);
-	ROUND3(c, d, a, b, in[6], 11);
-	ROUND3(b, c, d, a, in[14], 15);
-	ROUND3(a, b, c, d, in[1], 3);
-	ROUND3(d, a, b, c, in[9], 9);
-	ROUND3(c, d, a, b, in[5], 11);
-	ROUND3(b, c, d, a, in[13], 15);
-	ROUND3(a, b, c, d, in[3], 3);
-	ROUND3(d, a, b, c, in[11], 9);
-	ROUND3(c, d, a, b, in[7], 11);
-	ROUND3(b, c, d, a, in[15], 15);
-
-	hash[0] += a;
-	hash[1] += b;
-	hash[2] += c;
-	hash[3] += d;
-}
-
-static inline void md4_transform_helper(struct MD4_Context *ctx)
-{
-	le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(guint32));
-	md4_transform(ctx->hash, ctx->block);
-}
-
-static void
-md4_init(PurpleCipherContext *context, gpointer extra) {
-	struct MD4_Context *mctx;
-	mctx = g_new0(struct MD4_Context, 1);
-	purple_cipher_context_set_data(context, mctx);
-	purple_cipher_context_reset(context, extra);
-
-	mctx->hash[0] = 0x67452301;
-	mctx->hash[1] = 0xefcdab89;
-	mctx->hash[2] = 0x98badcfe;
-	mctx->hash[3] = 0x10325476;
-	mctx->byte_count = 0;
-}
-
-static void
-md4_reset(PurpleCipherContext *context, gpointer extra) {
-	struct MD4_Context *mctx;
-
-	mctx = purple_cipher_context_get_data(context);
-
-	mctx->hash[0] = 0x67452301;
-	mctx->hash[1] = 0xefcdab89;
-	mctx->hash[2] = 0x98badcfe;
-	mctx->hash[3] = 0x10325476;
-	mctx->byte_count = 0;
-}
-
-static void
-md4_append(PurpleCipherContext *context, const guchar *data, size_t len)
-{
-	struct MD4_Context *mctx = purple_cipher_context_get_data(context);
-	const guint32 avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f);
-
-	mctx->byte_count += len;
-
-	if (avail > len) {
-		memcpy((char *)mctx->block + (sizeof(mctx->block) - avail),
-				data, len);
-		return;
-	}
-
-	memcpy((char *)mctx->block + (sizeof(mctx->block) - avail),
-			data, avail);
-
-	md4_transform_helper(mctx);
-	data += avail;
-	len -= avail;
-
-	while (len >= sizeof(mctx->block)) {
-		memcpy(mctx->block, data, sizeof(mctx->block));
-		md4_transform_helper(mctx);
-		data += sizeof(mctx->block);
-		len -= sizeof(mctx->block);
-	}
-
-	memcpy(mctx->block, data, len);
-}
-
-static gboolean
-md4_digest(PurpleCipherContext *context, size_t in_len, guchar *out,
-		                   size_t *out_len)
-{
-	struct MD4_Context *mctx = purple_cipher_context_get_data(context);
-	const unsigned int offset = mctx->byte_count & 0x3f;
-	char *p = (char *)mctx->block + offset;
-	int padding = 56 - (offset + 1);
-
-
-	if(in_len<16) return FALSE;
-	if(out_len) *out_len = 16;
-	*p++ = 0x80;
-	if (padding < 0) {
-		memset(p, 0x00, padding + sizeof (guint64));
-		md4_transform_helper(mctx);
-		p = (char *)mctx->block;
-		padding = 56;
-	}
-
-	memset(p, 0, padding);
-	mctx->block[14] = mctx->byte_count << 3;
-	mctx->block[15] = mctx->byte_count >> 29;
-	le32_to_cpu_array(mctx->block, (sizeof(mctx->block) -
-				sizeof(guint64)) / sizeof(guint32));
-	md4_transform(mctx->hash, mctx->block);
-	cpu_to_le32_array(mctx->hash, sizeof(mctx->hash) / sizeof(guint32));
-	memcpy(out, mctx->hash, sizeof(mctx->hash));
-	memset(mctx, 0, sizeof(*mctx));
-	return TRUE;
-}
-
-static void
-md4_uninit(PurpleCipherContext *context) {
-	struct MD4_Context *md4_context;
-
-	purple_cipher_context_reset(context, NULL);
-
-	md4_context = purple_cipher_context_get_data(context);
-	memset(md4_context, 0, sizeof(md4_context));
-
-	g_free(md4_context);
-	md4_context = NULL;
-}
-
-static size_t
-md4_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return MD4_HMAC_BLOCK_SIZE;
-}
-
-static PurpleCipherOps MD4Ops = {
-	NULL,                   /* Set option */
-	NULL,                   /* Get option */
-	md4_init,               /* init */
-	md4_reset,              /* reset */
-	md4_uninit,             /* uninit */
-	NULL,                   /* set iv */
-	md4_append,             /* append */
-	md4_digest,             /* digest */
-	NULL,                   /* encrypt */
-	NULL,                   /* decrypt */
-	NULL,                   /* set salt */
-	NULL,                   /* get salt size */
-	NULL,                   /* set key */
-	NULL,                   /* get key size */
-	NULL,                   /* set batch mode */
-	NULL,                   /* get batch mode */
-	md4_get_block_size,     /* get block size */
-	NULL                    /* set key with len */
-};
-
-/*******************************************************************************
- * HMAC
- ******************************************************************************/
-
-struct HMAC_Context {
-	PurpleCipherContext *hash;
-	char *name;
-	int blocksize;
-	guchar *opad;
-};
-
-static void
-hmac_init(PurpleCipherContext *context, gpointer extra)
-{
-	struct HMAC_Context *hctx;
-	hctx = g_new0(struct HMAC_Context, 1);
-	purple_cipher_context_set_data(context, hctx);
-	purple_cipher_context_reset(context, extra);
-}
-
-static void
-hmac_reset(PurpleCipherContext *context, gpointer extra)
-{
-	struct HMAC_Context *hctx;
-
-	hctx = purple_cipher_context_get_data(context);
-
-	g_free(hctx->name);
-	hctx->name = NULL;
-	if (hctx->hash)
-		purple_cipher_context_destroy(hctx->hash);
-	hctx->hash = NULL;
-	hctx->blocksize = 0;
-	g_free(hctx->opad);
-	hctx->opad = NULL;
-}
-
-static void
-hmac_set_opt(PurpleCipherContext *context, const gchar *name, void *value)
-{
-	struct HMAC_Context *hctx;
-
-	hctx = purple_cipher_context_get_data(context);
-
-	if (purple_strequal(name, "hash")) {
-		g_free(hctx->name);
-		if (hctx->hash)
-			purple_cipher_context_destroy(hctx->hash);
-		hctx->name = g_strdup((char*)value);
-		hctx->hash = purple_cipher_context_new_by_name((char *)value, NULL);
-		hctx->blocksize = purple_cipher_context_get_block_size(hctx->hash);
-	}
-}
-
-static void *
-hmac_get_opt(PurpleCipherContext *context, const gchar *name)
-{
-	struct HMAC_Context *hctx;
-
-	hctx = purple_cipher_context_get_data(context);
-
-	if (purple_strequal(name, "hash")) {
-		return hctx->name;
-	}
-
-	return NULL;
-}
-
-static void
-hmac_append(PurpleCipherContext *context, const guchar *data, size_t len)
-{
-	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(hctx->hash != NULL);
-
-	purple_cipher_context_append(hctx->hash, data, len);
-}
-
-static gboolean
-hmac_digest(PurpleCipherContext *context, size_t in_len, guchar *out, size_t *out_len)
-{
-	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
-	PurpleCipherContext *hash = hctx->hash;
-	guchar *inner_hash;
-	size_t hash_len;
-	gboolean result;
-
-	g_return_val_if_fail(hash != NULL, FALSE);
-
-	inner_hash = g_malloc(100); /* TODO: Should be enough for now... */
-	result = purple_cipher_context_digest(hash, 100, inner_hash, &hash_len);
-
-	purple_cipher_context_reset(hash, NULL);
-
-	purple_cipher_context_append(hash, hctx->opad, hctx->blocksize);
-	purple_cipher_context_append(hash, inner_hash, hash_len);
-
-	g_free(inner_hash);
-
-	result = result && purple_cipher_context_digest(hash, in_len, out, out_len);
-
-	return result;
-}
-
-static void
-hmac_uninit(PurpleCipherContext *context)
-{
-	struct HMAC_Context *hctx;
-
-	purple_cipher_context_reset(context, NULL);
-
-	hctx = purple_cipher_context_get_data(context);
-
-	g_free(hctx);
-}
-
-static void
-hmac_set_key_with_len(PurpleCipherContext *context, const guchar * key, size_t key_len)
-{
-	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
-	int blocksize, i;
-	guchar *ipad;
-	guchar *full_key;
-
-	g_return_if_fail(hctx->hash != NULL);
-
-	g_free(hctx->opad);
-
-	blocksize = hctx->blocksize;
-	ipad = g_malloc(blocksize);
-	hctx->opad = g_malloc(blocksize);
-
-	if (key_len > blocksize) {
-		purple_cipher_context_reset(hctx->hash, NULL);
-		purple_cipher_context_append(hctx->hash, key, key_len);
-		full_key = g_malloc(100); /* TODO: Should be enough for now... */
-		purple_cipher_context_digest(hctx->hash, 100, full_key, &key_len);
-	} else
-		full_key = g_memdup(key, key_len);
-
-    if (key_len < blocksize) {
-    	full_key = g_realloc(full_key, blocksize);
-    	memset(full_key + key_len, 0, blocksize - key_len);
-    }
-
-	for(i = 0; i < blocksize; i++) {
-		ipad[i] = 0x36 ^ full_key[i];
-		hctx->opad[i] = 0x5c ^ full_key[i];
-	}
-
-	g_free(full_key);
-
-	purple_cipher_context_reset(hctx->hash, NULL);
-	purple_cipher_context_append(hctx->hash, ipad, blocksize);
-	g_free(ipad);
-}
-
-static void
-hmac_set_key(PurpleCipherContext *context, const guchar * key)
-{
-	hmac_set_key_with_len(context, key, strlen((char *)key));
-}
-
-static size_t
-hmac_get_block_size(PurpleCipherContext *context)
-{
-	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
-
-	return hctx->blocksize;
-}
-
-static PurpleCipherOps HMACOps = {
-	hmac_set_opt,           /* Set option */
-	hmac_get_opt,           /* Get option */
-	hmac_init,               /* init */
-	hmac_reset,              /* reset */
-	hmac_uninit,             /* uninit */
-	NULL,                   /* set iv */
-	hmac_append,             /* append */
-	hmac_digest,             /* digest */
-	NULL,                   /* encrypt */
-	NULL,                   /* decrypt */
-	NULL,                   /* set salt */
-	NULL,                   /* get salt size */
-	hmac_set_key,           /* set key */
-	NULL,                   /* get key size */
-	NULL,                   /* set batch mode */
-	NULL,                   /* get batch mode */
-	hmac_get_block_size,    /* get block size */
-	hmac_set_key_with_len   /* set key with len */
-};
-
-/******************************************************************************
- * DES
- *****************************************************************************/
-
-typedef struct _des_ctx
-{
-	guint32 encrypt_subkeys[32];
-	guint32 decrypt_subkeys[32];
-} des_ctx[1];
-
-/*
- *  The s-box values are permuted according to the 'primitive function P'
- */
-static const guint32 sbox1[64] =
-{
-	0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
-	0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
-	0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
-	0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
-	0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
-	0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
-	0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
-	0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
-};
-
-static const guint32 sbox2[64] =
-{
-	0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
-	0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
-	0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
-	0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
-	0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
-	0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
-	0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
-	0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
-};
-
-static const guint32 sbox3[64] =
-{
-	0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
-	0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
-	0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
-	0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
-	0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
-	0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
-	0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
-	0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
-};
-
-static const guint32 sbox4[64] =
-{
-	0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
-	0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
-	0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
-	0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
-	0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
-	0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
-	0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
-	0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
-};
-
-static const guint32 sbox5[64] =
-{
-	0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
-	0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
-	0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
-	0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
-	0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
-	0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
-	0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
-	0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
-};
-
-static const guint32 sbox6[64] =
-{
-	0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
-	0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
-	0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
-	0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
-	0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
-	0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
-	0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
-	0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
-};
-
-static const guint32 sbox7[64] =
-{
-	0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
-	0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
-	0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
-	0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
-	0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
-	0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
-	0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
-	0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
-};
-
-static const guint32 sbox8[64] =
-{
-	0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
-	0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
-	0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
-	0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
-	0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
-	0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
-	0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
-	0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
-};
-
-
-
-/*
- *  * These two tables are part of the 'permuted choice 1' function.
- *   * In this implementation several speed improvements are done.
- *    */
-static const guint32 leftkey_swap[16] =
-{
-	0x00000000, 0x00000001, 0x00000100, 0x00000101,
-	0x00010000, 0x00010001, 0x00010100, 0x00010101,
-	0x01000000, 0x01000001, 0x01000100, 0x01000101,
-	0x01010000, 0x01010001, 0x01010100, 0x01010101
-};
-
-static const guint32 rightkey_swap[16] =
-{
-	0x00000000, 0x01000000, 0x00010000, 0x01010000,
-	0x00000100, 0x01000100, 0x00010100, 0x01010100,
-	0x00000001, 0x01000001, 0x00010001, 0x01010001,
-	0x00000101, 0x01000101, 0x00010101, 0x01010101,
-};
-
-
-
-/*
- *  Numbers of left shifts per round for encryption subkey schedule
- *  To calculate the decryption key scheduling we just reverse the
- *  ordering of the subkeys so we can omit the table for decryption
- *  subkey schedule.
- */
-static const guint8 encrypt_rotate_tab[16] =
-{
-	1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
-};
-
-/*
- *  Macro to swap bits across two words
- **/
-#define DO_PERMUTATION(a, temp, b, offset, mask)	\
-	temp = ((a>>offset) ^ b) & mask;			\
-b ^= temp;						\
-a ^= temp<<offset;
-
-
-/*
- *  This performs the 'initial permutation' for the data to be encrypted or decrypted
- **/
-#define INITIAL_PERMUTATION(left, temp, right)		\
-	DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)	\
-DO_PERMUTATION(left, temp, right, 16, 0x0000ffff)	\
-DO_PERMUTATION(right, temp, left, 2, 0x33333333)	\
-DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff)	\
-DO_PERMUTATION(left, temp, right, 1, 0x55555555)
-
-
-/*
- * The 'inverse initial permutation'
- **/
-#define FINAL_PERMUTATION(left, temp, right)		\
-	DO_PERMUTATION(left, temp, right, 1, 0x55555555)	\
-DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff)	\
-DO_PERMUTATION(right, temp, left, 2, 0x33333333)	\
-DO_PERMUTATION(left, temp, right, 16, 0x0000ffff)	\
-DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
-
-
-/*
- * A full DES round including 'expansion function', 'sbox substitution'
- * and 'primitive function P' but without swapping the left and right word.
- **/
-#define DES_ROUND(from, to, work, subkey)		\
-	work = ((from<<1) | (from>>31)) ^ *subkey++;	\
-to ^= sbox8[  work	    & 0x3f ];			\
-to ^= sbox6[ (work>>8)  & 0x3f ];			\
-to ^= sbox4[ (work>>16) & 0x3f ];			\
-to ^= sbox2[ (work>>24) & 0x3f ];			\
-work = ((from>>3) | (from<<29)) ^ *subkey++;	\
-to ^= sbox7[  work	    & 0x3f ];			\
-to ^= sbox5[ (work>>8)  & 0x3f ];			\
-to ^= sbox3[ (work>>16) & 0x3f ];			\
-to ^= sbox1[ (work>>24) & 0x3f ];
-
-
-/*
- * Macros to convert 8 bytes from/to 32bit words
- **/
-#define READ_64BIT_DATA(data, left, right)					\
-	left  = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];	\
-right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
-
-#define WRITE_64BIT_DATA(data, left, right)					\
-	data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; 		\
-data[2] = (left >> 8) &0xff; data[3] = left &0xff;				\
-data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff;		\
-data[6] = (right >> 8) &0xff; data[7] = right &0xff;
-
-
-
-
-
-
-/*
- * des_key_schedule():	  Calculate 16 subkeys pairs (even/odd) for
- *			  16 encryption rounds.
- *			  To calculate subkeys for decryption the caller
- *    			  have to reorder the generated subkeys.
- *
- *        rawkey:	    8 Bytes of key data
- *        subkey:	    Array of at least 32 guint32s. Will be filled
- *    		    with calculated subkeys.
- *
- **/
-static void
-des_key_schedule (const guint8 * rawkey, guint32 * subkey)
-{
-	guint32 left, right, work;
-	int round;
-
-	READ_64BIT_DATA (rawkey, left, right)
-
-		DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f)
-		DO_PERMUTATION (right, work, left, 0, 0x10101010)
-
-		left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2)
-		| (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf])
-		| (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6)
-		| (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4);
-
-	left &= 0x0fffffff;
-
-	right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2)
-		| (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf])
-		| (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6)
-		| (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4);
-
-	right &= 0x0fffffff;
-
-	for (round = 0; round < 16; ++round)
-	{
-		left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
-		right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
-
-		*subkey++ = ((left << 4) & 0x24000000)
-			| ((left << 28) & 0x10000000)
-			| ((left << 14) & 0x08000000)
-			| ((left << 18) & 0x02080000)
-			| ((left << 6) & 0x01000000)
-			| ((left << 9) & 0x00200000)
-			| ((left >> 1) & 0x00100000)
-			| ((left << 10) & 0x00040000)
-			| ((left << 2) & 0x00020000)
-			| ((left >> 10) & 0x00010000)
-			| ((right >> 13) & 0x00002000)
-			| ((right >> 4) & 0x00001000)
-			| ((right << 6) & 0x00000800)
-			| ((right >> 1) & 0x00000400)
-			| ((right >> 14) & 0x00000200)
-			| (right & 0x00000100)
-			| ((right >> 5) & 0x00000020)
-			| ((right >> 10) & 0x00000010)
-			| ((right >> 3) & 0x00000008)
-			| ((right >> 18) & 0x00000004)
-			| ((right >> 26) & 0x00000002)
-			| ((right >> 24) & 0x00000001);
-
-		*subkey++ = ((left << 15) & 0x20000000)
-			| ((left << 17) & 0x10000000)
-			| ((left << 10) & 0x08000000)
-			| ((left << 22) & 0x04000000)
-			| ((left >> 2) & 0x02000000)
-			| ((left << 1) & 0x01000000)
-			| ((left << 16) & 0x00200000)
-			| ((left << 11) & 0x00100000)
-			| ((left << 3) & 0x00080000)
-			| ((left >> 6) & 0x00040000)
-			| ((left << 15) & 0x00020000)
-			| ((left >> 4) & 0x00010000)
-			| ((right >> 2) & 0x00002000)
-			| ((right << 8) & 0x00001000)
-			| ((right >> 14) & 0x00000808)
-			| ((right >> 9) & 0x00000400)
-			| ((right) & 0x00000200)
-			| ((right << 7) & 0x00000100)
-			| ((right >> 7) & 0x00000020)
-			| ((right >> 3) & 0x00000011)
-			| ((right << 2) & 0x00000004)
-			| ((right >> 21) & 0x00000002);
-	}
-}
-
-
-
-/*
- *  Fill a DES context with subkeys calculated from a 64bit key.
- *  Does not check parity bits, but simply ignore them.
- *  Does not check for weak keys.
- **/
-static void
-des_set_key (PurpleCipherContext *context, const guchar * key)
-{
-	struct _des_ctx *ctx = purple_cipher_context_get_data(context);
-	int i;
-
-	des_key_schedule (key, ctx->encrypt_subkeys);
-
-	for(i=0; i<32; i+=2)
-	{
-		ctx->decrypt_subkeys[i]	= ctx->encrypt_subkeys[30-i];
-		ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
-	}
-}
-
-
-
-/*
- *  Electronic Codebook Mode DES encryption/decryption of data according
- *  to 'mode'.
- **/
-static int
-des_ecb_crypt (struct _des_ctx *ctx, const guint8 * from, guint8 * to, int mode)
-{
-	guint32 left, right, work;
-	guint32 *keys;
-
-	keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
-
-	READ_64BIT_DATA (from, left, right)
-		INITIAL_PERMUTATION (left, work, right)
-
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-		DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
-
-		FINAL_PERMUTATION (right, work, left)
-		WRITE_64BIT_DATA (to, right, left)
-
-		return 0;
-}
-
-static gint
-des_encrypt(PurpleCipherContext *context, const guchar data[],
-	    size_t len, guchar output[], size_t *outlen) {
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8] = {0,0,0,0,0,0,0,0};
-	while(offset+8<=len) {
-		des_ecb_crypt(purple_cipher_context_get_data(context),
-				data+offset,
-				output+offset,
-				0);
-		offset+=8;
-	}
-	*outlen = len;
-	if(offset<len) {
-		*outlen += len - offset;
-		tmp = offset;
-		while(tmp<len) {
-			buf[i++] = data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(purple_cipher_context_get_data(context),
-				buf,
-				output+offset,
-				0);
-	}
-	return 0;
-}
-
-static gint
-des_decrypt(PurpleCipherContext *context, const guchar data[],
-	    size_t len, guchar output[], size_t *outlen) {
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8] = {0,0,0,0,0,0,0,0};
-	while(offset+8<=len) {
-		des_ecb_crypt(purple_cipher_context_get_data(context),
-				data+offset,
-				output+offset,
-				1);
-		offset+=8;
-	}
-	*outlen = len;
-	if(offset<len) {
-		*outlen += len - offset;
-		tmp = offset;
-		while(tmp<len) {
-			buf[i++] = data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(purple_cipher_context_get_data(context),
-				buf,
-				output+offset,
-				1);
-	}
-	return 0;
-}
-
-static void
-des_init(PurpleCipherContext *context, gpointer extra) {
-	struct _des_ctx *mctx;
-	mctx = g_new0(struct _des_ctx, 1);
-	purple_cipher_context_set_data(context, mctx);
-}
-
-static void
-des_uninit(PurpleCipherContext *context) {
-	struct _des_ctx *des_context;
-
-	des_context = purple_cipher_context_get_data(context);
-	memset(des_context, 0, sizeof(des_context));
-
-	g_free(des_context);
-	des_context = NULL;
-}
-
-static PurpleCipherOps DESOps = {
-	NULL,              /* Set option */
-	NULL,              /* Get option */
-	des_init,          /* init */
- 	NULL,              /* reset */
-	des_uninit,        /* uninit */
-	NULL,              /* set iv */
-	NULL,              /* append */
-	NULL,              /* digest */
-	des_encrypt,       /* encrypt */
-	des_decrypt,       /* decrypt */
-	NULL,              /* set salt */
-	NULL,              /* get salt size */
-	des_set_key,       /* set key */
-	NULL,              /* get key size */
-	NULL,              /* set batch mode */
-	NULL,              /* get batch mode */
-	NULL,              /* get block size */
-	NULL               /* set key with len */
-};
-
-/******************************************************************************
- * Triple-DES
- *****************************************************************************/
-
-typedef struct _des3_ctx
-{
-	PurpleCipherBatchMode mode;
-	guchar iv[8];
-	/* First key for encryption */
-	struct _des_ctx key1;
-	/* Second key for decryption */
-	struct _des_ctx key2;
-	/* Third key for encryption */
-	struct _des_ctx key3;
-} des3_ctx[1];
-
-/*
- *  Fill a DES3 context with subkeys calculated from 3 64bit key.
- *  Does not check parity bits, but simply ignore them.
- *  Does not check for weak keys.
- **/
-static void
-des3_set_key(PurpleCipherContext *context, const guchar * key)
-{
-	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
-	int i;
-
-	des_key_schedule (key +  0, ctx->key1.encrypt_subkeys);
-	des_key_schedule (key +  8, ctx->key2.encrypt_subkeys);
-	des_key_schedule (key + 16, ctx->key3.encrypt_subkeys);
-
-	for (i = 0; i < 32; i += 2)
-	{
-		ctx->key1.decrypt_subkeys[i]	= ctx->key1.encrypt_subkeys[30-i];
-		ctx->key1.decrypt_subkeys[i+1]	= ctx->key1.encrypt_subkeys[31-i];
-		ctx->key2.decrypt_subkeys[i]	= ctx->key2.encrypt_subkeys[30-i];
-		ctx->key2.decrypt_subkeys[i+1]	= ctx->key2.encrypt_subkeys[31-i];
-		ctx->key3.decrypt_subkeys[i]	= ctx->key3.encrypt_subkeys[30-i];
-		ctx->key3.decrypt_subkeys[i+1]	= ctx->key3.encrypt_subkeys[31-i];
-	}
-}
-
-static gint
-des3_ecb_encrypt(struct _des3_ctx *ctx, const guchar data[],
-                 size_t len, guchar output[], size_t *outlen)
-{
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8] = {0,0,0,0,0,0,0,0};
-	while (offset + 8 <= len) {
-		des_ecb_crypt(&ctx->key1,
-		              data+offset,
-		              output+offset,
-		              0);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              1);
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              0);
-		offset += 8;
-	}
-	*outlen = len;
-	if (offset < len) {
-		*outlen += len - offset;
-		tmp = offset;
-		memset(buf, 0, 8);
-		while (tmp < len) {
-			buf[i++] = data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              0);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              1);
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              0);
-	}
-	return 0;
-}
-
-static gint
-des3_cbc_encrypt(struct _des3_ctx *ctx, const guchar data[],
-                 size_t len, guchar output[], size_t *outlen)
-{
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8];
-	memcpy(buf, ctx->iv, 8);
-	while (offset + 8 <= len) {
-		for (i = 0; i < 8; i++)
-			buf[i] ^= data[offset + i];
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              0);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              1);
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              0);
-		memcpy(buf, output+offset, 8);
-		offset += 8;
-	}
-	*outlen = len;
-	if (offset < len) {
-		*outlen += len - offset;
-		tmp = offset;
-		i = 0;
-		while (tmp < len) {
-			buf[i++] ^= data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              0);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              1);
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              0);
-	}
-	return 0;
-}
-
-static gint
-des3_encrypt(PurpleCipherContext *context, const guchar data[],
-             size_t len, guchar output[], size_t *outlen)
-{
-	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
-
-	if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
-		return des3_ecb_encrypt(ctx, data, len, output, outlen);
-	} else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
-		return des3_cbc_encrypt(ctx, data, len, output, outlen);
-	} else {
-		g_return_val_if_reached(0);
-	}
-
-	return 0;
-}
-
-static gint
-des3_ecb_decrypt(struct _des3_ctx *ctx, const guchar data[],
-                 size_t len, guchar output[], size_t *outlen)
-{
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8] = {0,0,0,0,0,0,0,0};
-	while (offset + 8 <= len) {
-		/* NOTE: Apply key in reverse */
-		des_ecb_crypt(&ctx->key3,
-		              data+offset,
-		              output+offset,
-		              1);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              0);
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              1);
-		offset+=8;
-	}
-	*outlen = len;
-	if (offset < len) {
-		*outlen += len - offset;
-		tmp = offset;
-		memset(buf, 0, 8);
-		while (tmp < len) {
-			buf[i++] = data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              1);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              0);
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              1);
-	}
-	return 0;
-}
-
-static gint
-des3_cbc_decrypt(struct _des3_ctx *ctx, const guchar data[],
-                 size_t len, guchar output[], size_t *outlen)
-{
-	int offset = 0;
-	int i = 0;
-	int tmp;
-	guint8 buf[8] = {0,0,0,0,0,0,0,0};
-	guint8 link[8];
-	memcpy(link, ctx->iv, 8);
-	while (offset + 8 <= len) {
-		des_ecb_crypt(&ctx->key3,
-		              data+offset,
-		              output+offset,
-		              1);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              0);
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              1);
-		for (i = 0; i < 8; i++)
-			output[offset + i] ^= link[i];
-		memcpy(link, data + offset, 8);
-		offset+=8;
-	}
-	*outlen = len;
-	if(offset<len) {
-		*outlen += len - offset;
-		tmp = offset;
-		memset(buf, 0, 8);
-		i = 0;
-		while(tmp<len) {
-			buf[i++] = data[tmp];
-			tmp++;
-		}
-		des_ecb_crypt(&ctx->key3,
-		              buf,
-		              output+offset,
-		              1);
-		des_ecb_crypt(&ctx->key2,
-		              output+offset,
-		              buf,
-		              0);
-		des_ecb_crypt(&ctx->key1,
-		              buf,
-		              output+offset,
-		              1);
-		for (i = 0; i < 8; i++)
-			output[offset + i] ^= link[i];
-	}
-	return 0;
-}
-
-static gint
-des3_decrypt(PurpleCipherContext *context, const guchar data[],
-             size_t len, guchar output[], size_t *outlen)
-{
-	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
-
-	if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
-		return des3_ecb_decrypt(ctx, data, len, output, outlen);
-	} else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
-		return des3_cbc_decrypt(ctx, data, len, output, outlen);
-	} else {
-		g_return_val_if_reached(0);
-	}
-
-	return 0;
-}
-
-static void
-des3_set_batch(PurpleCipherContext *context, PurpleCipherBatchMode mode)
-{
-	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
-
-	ctx->mode = mode;
-}
-
-static PurpleCipherBatchMode
-des3_get_batch(PurpleCipherContext *context)
-{
-	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
-
-	return ctx->mode;
-}
-
-static void
-des3_set_iv(PurpleCipherContext *context, guchar *iv, size_t len)
-{
-	struct _des3_ctx *ctx;
-
-	g_return_if_fail(len == 8);
-
-	ctx = purple_cipher_context_get_data(context);
-
-	memcpy(ctx->iv, iv, len);
-}
-
-static void
-des3_init(PurpleCipherContext *context, gpointer extra)
-{
-	struct _des3_ctx *mctx;
-	mctx = g_new0(struct _des3_ctx, 1);
-	purple_cipher_context_set_data(context, mctx);
-}
-
-static void
-des3_uninit(PurpleCipherContext *context)
-{
-	struct _des3_ctx *des3_context;
-
-	des3_context = purple_cipher_context_get_data(context);
-	memset(des3_context, 0, sizeof(des3_context));
-
-	g_free(des3_context);
-	des3_context = NULL;
-}
-
-static PurpleCipherOps DES3Ops = {
-	NULL,              /* Set option */
-	NULL,              /* Get option */
-	des3_init,         /* init */
-	NULL,              /* reset */
-	des3_uninit,       /* uninit */
-	des3_set_iv,       /* set iv */
-	NULL,              /* append */
-	NULL,              /* digest */
-	des3_encrypt,      /* encrypt */
-	des3_decrypt,      /* decrypt */
-	NULL,              /* set salt */
-	NULL,              /* get salt size */
-	des3_set_key,      /* set key */
-	NULL,              /* get key size */
-	des3_set_batch,    /* set batch mode */
-	des3_get_batch,    /* get batch mode */
-	NULL,              /* get block size */
-	NULL               /* set key with len */
-};
-
-/*******************************************************************************
- * SHA-1
- ******************************************************************************/
-#define SHA1_HMAC_BLOCK_SIZE	64
-
-static size_t
-sha1_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return SHA1_HMAC_BLOCK_SIZE;
-}
-
-
-#if GLIB_CHECK_VERSION(2,16,0)
-
-static void
-sha1_init(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_init(context, G_CHECKSUM_SHA1);
-}
-
-static void
-sha1_reset(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_reset(context, G_CHECKSUM_SHA1);
-}
-
-static gboolean
-sha1_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20],
-            gsize *out_len)
-{
-	return purple_g_checksum_digest(context, G_CHECKSUM_SHA1, in_len,
-	                                digest, out_len);
-}
-
-static PurpleCipherOps SHA1Ops = {
-	NULL,			/* Set Option		*/
-	NULL,			/* Get Option		*/
-	sha1_init,		/* init				*/
-	sha1_reset,		/* reset			*/
-	purple_g_checksum_uninit,	/* uninit			*/
-	NULL,			/* set iv			*/
-	purple_g_checksum_append,	/* append			*/
-	sha1_digest,	/* digest			*/
-	NULL,			/* encrypt			*/
-	NULL,			/* decrypt			*/
-	NULL,			/* set salt			*/
-	NULL,			/* get salt size	*/
-	NULL,			/* set key			*/
-	NULL,			/* get key size		*/
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	sha1_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#else /* GLIB_CHECK_VERSION(2,16,0) */
-
-#define SHA1_HMAC_BLOCK_SIZE	64
-#define SHA1_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xFFFFFFFF)
-
-struct SHA1Context {
-	guint32 H[5];
-	guint32 W[80];
-
-	gint lenW;
-
-	guint32 sizeHi;
-	guint32 sizeLo;
-};
-
-static void
-sha1_hash_block(struct SHA1Context *sha1_ctx) {
-	gint i;
-	guint32 A, B, C, D, E, T;
-
-	for(i = 16; i < 80; i++) {
-		sha1_ctx->W[i] = SHA1_ROTL(sha1_ctx->W[i -  3] ^
-								   sha1_ctx->W[i -  8] ^
-								   sha1_ctx->W[i - 14] ^
-								   sha1_ctx->W[i - 16], 1);
-	}
-
-	A = sha1_ctx->H[0];
-	B = sha1_ctx->H[1];
-	C = sha1_ctx->H[2];
-	D = sha1_ctx->H[3];
-	E = sha1_ctx->H[4];
-
-	for(i = 0; i < 20; i++) {
-		T = (SHA1_ROTL(A, 5) + (((C ^ D) & B) ^ D) + E + sha1_ctx->W[i] + 0x5A827999) & 0xFFFFFFFF;
-		E = D;
-		D = C;
-		C = SHA1_ROTL(B, 30);
-		B = A;
-		A = T;
-	}
-
-	for(i = 20; i < 40; i++) {
-		T = (SHA1_ROTL(A, 5) + (B ^ C ^ D) + E + sha1_ctx->W[i] + 0x6ED9EBA1) & 0xFFFFFFFF;
-		E = D;
-		D = C;
-		C = SHA1_ROTL(B, 30);
-		B = A;
-		A = T;
-	}
-
-	for(i = 40; i < 60; i++) {
-		T = (SHA1_ROTL(A, 5) + ((B & C) | (D & (B | C))) + E + sha1_ctx->W[i] + 0x8F1BBCDC) & 0xFFFFFFFF;
-		E = D;
-		D = C;
-		C = SHA1_ROTL(B, 30);
-		B = A;
-		A = T;
-	}
-
-	for(i = 60; i < 80; i++) {
-		T = (SHA1_ROTL(A, 5) + (B ^ C ^ D) + E + sha1_ctx->W[i] + 0xCA62C1D6) & 0xFFFFFFFF;
-		E = D;
-		D = C;
-		C = SHA1_ROTL(B, 30);
-		B = A;
-		A = T;
-	}
-
-	sha1_ctx->H[0] += A;
-	sha1_ctx->H[1] += B;
-	sha1_ctx->H[2] += C;
-	sha1_ctx->H[3] += D;
-	sha1_ctx->H[4] += E;
-}
-
-static void
-sha1_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
-	struct SHA1Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(purple_strequal(name, "sizeHi")) {
-		ctx->sizeHi = GPOINTER_TO_INT(value);
-	} else if(purple_strequal(name, "sizeLo")) {
-		ctx->sizeLo = GPOINTER_TO_INT(value);
-	} else if(purple_strequal(name, "lenW")) {
-		ctx->lenW = GPOINTER_TO_INT(value);
-	}
-}
-
-static void *
-sha1_get_opt(PurpleCipherContext *context, const gchar *name) {
-	struct SHA1Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(purple_strequal(name, "sizeHi")) {
-		return GINT_TO_POINTER(ctx->sizeHi);
-	} else if(purple_strequal(name, "sizeLo")) {
-		return GINT_TO_POINTER(ctx->sizeLo);
-	} else if(purple_strequal(name, "lenW")) {
-		return GINT_TO_POINTER(ctx->lenW);
-	}
-
-	return NULL;
-}
-
-static void
-sha1_init(PurpleCipherContext *context, void *extra) {
-	struct SHA1Context *sha1_ctx;
-
-	sha1_ctx = g_new0(struct SHA1Context, 1);
-
-	purple_cipher_context_set_data(context, sha1_ctx);
-
-	purple_cipher_context_reset(context, extra);
-}
-
-static void
-sha1_reset(PurpleCipherContext *context, void *extra) {
-	struct SHA1Context *sha1_ctx;
-	gint i;
-
-	sha1_ctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(sha1_ctx);
-
-	sha1_ctx->lenW = 0;
-	sha1_ctx->sizeHi = 0;
-	sha1_ctx->sizeLo = 0;
-
-	sha1_ctx->H[0] = 0x67452301;
-	sha1_ctx->H[1] = 0xEFCDAB89;
-	sha1_ctx->H[2] = 0x98BADCFE;
-	sha1_ctx->H[3] = 0x10325476;
-	sha1_ctx->H[4] = 0xC3D2E1F0;
-
-	for(i = 0; i < 80; i++)
-		sha1_ctx->W[i] = 0;
-}
-
-static void
-sha1_uninit(PurpleCipherContext *context) {
-	struct SHA1Context *sha1_ctx;
-
-	purple_cipher_context_reset(context, NULL);
-
-	sha1_ctx = purple_cipher_context_get_data(context);
-
-	memset(sha1_ctx, 0, sizeof(struct SHA1Context));
-
-	g_free(sha1_ctx);
-	sha1_ctx = NULL;
-}
-
-
-static void
-sha1_append(PurpleCipherContext *context, const guchar *data, size_t len) {
-	struct SHA1Context *sha1_ctx;
-	gint i;
-
-	sha1_ctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(sha1_ctx);
-
-	for(i = 0; i < len; i++) {
-		sha1_ctx->W[sha1_ctx->lenW / 4] <<= 8;
-		sha1_ctx->W[sha1_ctx->lenW / 4] |= data[i];
-
-		if((++sha1_ctx->lenW) % 64 == 0) {
-			sha1_hash_block(sha1_ctx);
-			sha1_ctx->lenW = 0;
-		}
-
-		sha1_ctx->sizeLo += 8;
-		sha1_ctx->sizeHi += (sha1_ctx->sizeLo < 8);
-	}
-}
-
-static gboolean
-sha1_digest(PurpleCipherContext *context, size_t in_len, guchar digest[20],
-			size_t *out_len)
-{
-	struct SHA1Context *sha1_ctx;
-	guchar pad0x80 = 0x80, pad0x00 = 0x00;
-	guchar padlen[8];
-	gint i;
-
-	g_return_val_if_fail(in_len >= 20, FALSE);
-
-	sha1_ctx = purple_cipher_context_get_data(context);
-
-	g_return_val_if_fail(sha1_ctx, FALSE);
-
-	padlen[0] = (guchar)((sha1_ctx->sizeHi >> 24) & 255);
-	padlen[1] = (guchar)((sha1_ctx->sizeHi >> 16) & 255);
-	padlen[2] = (guchar)((sha1_ctx->sizeHi >> 8) & 255);
-	padlen[3] = (guchar)((sha1_ctx->sizeHi >> 0) & 255);
-	padlen[4] = (guchar)((sha1_ctx->sizeLo >> 24) & 255);
-	padlen[5] = (guchar)((sha1_ctx->sizeLo >> 16) & 255);
-	padlen[6] = (guchar)((sha1_ctx->sizeLo >> 8) & 255);
-	padlen[7] = (guchar)((sha1_ctx->sizeLo >> 0) & 255);
-
-	/* pad with a 1, then zeroes, then length */
-	purple_cipher_context_append(context, &pad0x80, 1);
-	while(sha1_ctx->lenW != 56)
-		purple_cipher_context_append(context, &pad0x00, 1);
-	purple_cipher_context_append(context, padlen, 8);
-
-	for(i = 0; i < 20; i++) {
-		digest[i] = (guchar)(sha1_ctx->H[i / 4] >> 24);
-		sha1_ctx->H[i / 4] <<= 8;
-	}
-
-	purple_cipher_context_reset(context, NULL);
-
-	if(out_len)
-		*out_len = 20;
-
-	return TRUE;
-}
-
-static PurpleCipherOps SHA1Ops = {
-	sha1_set_opt,	/* Set Option		*/
-	sha1_get_opt,	/* Get Option		*/
-	sha1_init,		/* init				*/
-	sha1_reset,		/* reset			*/
-	sha1_uninit,	/* uninit			*/
-	NULL,			/* set iv			*/
-	sha1_append,	/* append			*/
-	sha1_digest,	/* digest			*/
-	NULL,			/* encrypt			*/
-	NULL,			/* decrypt			*/
-	NULL,			/* set salt			*/
-	NULL,			/* get salt size	*/
-	NULL,			/* set key			*/
-	NULL,			/* get key size		*/
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	sha1_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#endif /* GLIB_CHECK_VERSION(2,16,0) */
-
-/*******************************************************************************
- * SHA-256
- ******************************************************************************/
-#define SHA256_HMAC_BLOCK_SIZE	64
-
-static size_t
-sha256_get_block_size(PurpleCipherContext *context)
-{
-	/* This does not change (in this case) */
-	return SHA256_HMAC_BLOCK_SIZE;
-}
-
-#if GLIB_CHECK_VERSION(2,16,0)
-
-static void
-sha256_init(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_init(context, G_CHECKSUM_SHA256);
-}
-
-static void
-sha256_reset(PurpleCipherContext *context, void *extra)
-{
-	purple_g_checksum_reset(context, G_CHECKSUM_SHA256);
-}
-
-static gboolean
-sha256_digest(PurpleCipherContext *context, gsize in_len, guchar digest[20],
-            gsize *out_len)
-{
-	return purple_g_checksum_digest(context, G_CHECKSUM_SHA256, in_len,
-	                                digest, out_len);
-}
-
-static PurpleCipherOps SHA256Ops = {
-	NULL,			/* Set Option		*/
-	NULL,			/* Get Option		*/
-	sha256_init,	/* init				*/
-	sha256_reset,	/* reset			*/
-	purple_g_checksum_uninit,	/* uninit			*/
-	NULL,			/* set iv			*/
-	purple_g_checksum_append,	/* append			*/
-	sha256_digest,	/* digest			*/
-	NULL,			/* encrypt			*/
-	NULL,			/* decrypt			*/
-	NULL,			/* set salt			*/
-	NULL,			/* get salt size	*/
-	NULL,			/* set key			*/
-	NULL,			/* get key size		*/
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	sha256_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#else /* GLIB_CHECK_VERSION(2,16,0) */
-
-#define SHA256_ROTR(X,n) ((((X) >> (n)) | ((X) << (32-(n)))) & 0xFFFFFFFF)
-
-static const guint32 sha256_K[64] =
-{
-	0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-	0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-	0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-	0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-	0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-	0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-	0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-	0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-};
-
-struct SHA256Context {
-	guint32 H[8];
-	guint32 W[64];
-
-	gint lenW;
-
-	guint32 sizeHi;
-	guint32 sizeLo;
-};
-
-static void
-sha256_hash_block(struct SHA256Context *sha256_ctx) {
-	gint i;
-	guint32 A, B, C, D, E, F, G, H, T1, T2;
-
-	for(i = 16; i < 64; i++) {
-		sha256_ctx->W[i] =
-			  (SHA256_ROTR(sha256_ctx->W[i-2], 17) ^ SHA256_ROTR(sha256_ctx->W[i-2],  19) ^ (sha256_ctx->W[i-2] >> 10))
-			+ sha256_ctx->W[i-7]
-			+ (SHA256_ROTR(sha256_ctx->W[i-15], 7) ^ SHA256_ROTR(sha256_ctx->W[i-15], 18) ^ (sha256_ctx->W[i-15] >> 3))
-			+ sha256_ctx->W[i-16];
-	}
-
-	A = sha256_ctx->H[0];
-	B = sha256_ctx->H[1];
-	C = sha256_ctx->H[2];
-	D = sha256_ctx->H[3];
-	E = sha256_ctx->H[4];
-	F = sha256_ctx->H[5];
-	G = sha256_ctx->H[6];
-	H = sha256_ctx->H[7];
-
-	for(i = 0; i < 64; i++) {
-        T1 = H
-			+ (SHA256_ROTR(E, 6) ^ SHA256_ROTR(E, 11) ^ SHA256_ROTR(E, 25))
-			+ ((E & F) ^ ((~E) & G))
-			+ sha256_K[i] + sha256_ctx->W[i];
-        T2 = (SHA256_ROTR(A, 2) ^ SHA256_ROTR(A, 13) ^ SHA256_ROTR(A, 22))
-			+ ((A & B) ^ (A & C) ^ (B & C));
-		H = G;
-		G = F;
-		F = E;
-		E = D + T1;
-		D = C;
-		C = B;
-		B = A;
-		A = T1 + T2;
-	}
-
-	sha256_ctx->H[0] += A;
-	sha256_ctx->H[1] += B;
-	sha256_ctx->H[2] += C;
-	sha256_ctx->H[3] += D;
-	sha256_ctx->H[4] += E;
-	sha256_ctx->H[5] += F;
-	sha256_ctx->H[6] += G;
-	sha256_ctx->H[7] += H;
-}
-
-static void
-sha256_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
-	struct SHA256Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(!strcmp(name, "sizeHi")) {
-		ctx->sizeHi = GPOINTER_TO_INT(value);
-	} else if(!strcmp(name, "sizeLo")) {
-		ctx->sizeLo = GPOINTER_TO_INT(value);
-	} else if(!strcmp(name, "lenW")) {
-		ctx->lenW = GPOINTER_TO_INT(value);
-	}
-}
-
-static void *
-sha256_get_opt(PurpleCipherContext *context, const gchar *name) {
-	struct SHA256Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(!strcmp(name, "sizeHi")) {
-		return GINT_TO_POINTER(ctx->sizeHi);
-	} else if(!strcmp(name, "sizeLo")) {
-		return GINT_TO_POINTER(ctx->sizeLo);
-	} else if(!strcmp(name, "lenW")) {
-		return GINT_TO_POINTER(ctx->lenW);
-	}
-
-	return NULL;
-}
-
-static void
-sha256_init(PurpleCipherContext *context, void *extra) {
-	struct SHA256Context *sha256_ctx;
-
-	sha256_ctx = g_new0(struct SHA256Context, 1);
-
-	purple_cipher_context_set_data(context, sha256_ctx);
-
-	purple_cipher_context_reset(context, extra);
-}
-
-static void
-sha256_reset(PurpleCipherContext *context, void *extra) {
-	struct SHA256Context *sha256_ctx;
-	gint i;
-
-	sha256_ctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(sha256_ctx);
-
-	sha256_ctx->lenW = 0;
-	sha256_ctx->sizeHi = 0;
-	sha256_ctx->sizeLo = 0;
-
-	sha256_ctx->H[0] = 0x6a09e667;
-	sha256_ctx->H[1] = 0xbb67ae85;
-	sha256_ctx->H[2] = 0x3c6ef372;
-	sha256_ctx->H[3] = 0xa54ff53a;
-	sha256_ctx->H[4] = 0x510e527f;
-	sha256_ctx->H[5] = 0x9b05688c;
-	sha256_ctx->H[6] = 0x1f83d9ab;
-	sha256_ctx->H[7] = 0x5be0cd19;
-
-	for(i = 0; i < 64; i++)
-		sha256_ctx->W[i] = 0;
-}
-
-static void
-sha256_uninit(PurpleCipherContext *context) {
-	struct SHA256Context *sha256_ctx;
-
-	purple_cipher_context_reset(context, NULL);
-
-	sha256_ctx = purple_cipher_context_get_data(context);
-
-	memset(sha256_ctx, 0, sizeof(struct SHA256Context));
-
-	g_free(sha256_ctx);
-	sha256_ctx = NULL;
-}
-
-
-static void
-sha256_append(PurpleCipherContext *context, const guchar *data, size_t len) {
-	struct SHA256Context *sha256_ctx;
-	gint i;
-
-	sha256_ctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(sha256_ctx);
-
-	for(i = 0; i < len; i++) {
-		sha256_ctx->W[sha256_ctx->lenW / 4] <<= 8;
-		sha256_ctx->W[sha256_ctx->lenW / 4] |= data[i];
-
-		if((++sha256_ctx->lenW) % 64 == 0) {
-			sha256_hash_block(sha256_ctx);
-			sha256_ctx->lenW = 0;
-		}
-
-		sha256_ctx->sizeLo += 8;
-		sha256_ctx->sizeHi += (sha256_ctx->sizeLo < 8);
-	}
-}
-
-static gboolean
-sha256_digest(PurpleCipherContext *context, size_t in_len, guchar digest[32],
-			size_t *out_len)
-{
-	struct SHA256Context *sha256_ctx;
-	guchar pad0x80 = 0x80, pad0x00 = 0x00;
-	guchar padlen[8];
-	gint i;
-
-	g_return_val_if_fail(in_len >= 32, FALSE);
-
-	sha256_ctx = purple_cipher_context_get_data(context);
-
-	g_return_val_if_fail(sha256_ctx, FALSE);
-
-	padlen[0] = (guchar)((sha256_ctx->sizeHi >> 24) & 255);
-	padlen[1] = (guchar)((sha256_ctx->sizeHi >> 16) & 255);
-	padlen[2] = (guchar)((sha256_ctx->sizeHi >> 8) & 255);
-	padlen[3] = (guchar)((sha256_ctx->sizeHi >> 0) & 255);
-	padlen[4] = (guchar)((sha256_ctx->sizeLo >> 24) & 255);
-	padlen[5] = (guchar)((sha256_ctx->sizeLo >> 16) & 255);
-	padlen[6] = (guchar)((sha256_ctx->sizeLo >> 8) & 255);
-	padlen[7] = (guchar)((sha256_ctx->sizeLo >> 0) & 255);
-
-	/* pad with a 1, then zeroes, then length */
-	purple_cipher_context_append(context, &pad0x80, 1);
-	while(sha256_ctx->lenW != 56)
-		purple_cipher_context_append(context, &pad0x00, 1);
-	purple_cipher_context_append(context, padlen, 8);
-
-	for(i = 0; i < 32; i++) {
-		digest[i] = (guchar)(sha256_ctx->H[i / 4] >> 24);
-		sha256_ctx->H[i / 4] <<= 8;
-	}
-
-	purple_cipher_context_reset(context, NULL);
-
-	if(out_len)
-		*out_len = 32;
-
-	return TRUE;
-}
-
-static PurpleCipherOps SHA256Ops = {
-	sha256_set_opt,	/* Set Option		*/
-	sha256_get_opt,	/* Get Option		*/
-	sha256_init,	/* init				*/
-	sha256_reset,	/* reset			*/
-	sha256_uninit,	/* uninit			*/
-	NULL,			/* set iv			*/
-	sha256_append,	/* append			*/
-	sha256_digest,	/* digest			*/
-	NULL,			/* encrypt			*/
-	NULL,			/* decrypt			*/
-	NULL,			/* set salt			*/
-	NULL,			/* get salt size	*/
-	NULL,			/* set key			*/
-	NULL,			/* get key size		*/
-	NULL,			/* set batch mode */
-	NULL,			/* get batch mode */
-	sha256_get_block_size,	/* get block size */
-	NULL			/* set key with len */
-};
-
-#endif /* GLIB_CHECK_VERSION(2,16,0) */
-
-/*******************************************************************************
- * RC4
- ******************************************************************************/
-
-struct RC4Context {
-  guchar state[256];
-  guchar x;
-  guchar y;
-  gint key_len;
-};
-
-static void
-rc4_init(PurpleCipherContext *context, void *extra) {
-	struct RC4Context *rc4_ctx;
-	rc4_ctx = g_new0(struct RC4Context, 1);
-	purple_cipher_context_set_data(context, rc4_ctx);
-	purple_cipher_context_reset(context, extra);
-}
-
-
-static void
-rc4_reset(PurpleCipherContext *context, void *extra) {
-	struct RC4Context *rc4_ctx;
-	guint i;
-
-	rc4_ctx = purple_cipher_context_get_data(context);
-
-	g_return_if_fail(rc4_ctx);
-
-	for(i = 0; i < 256; i++)
-		rc4_ctx->state[i] = i;
-	rc4_ctx->x = 0;
-	rc4_ctx->y = 0;
-
-	/* default is 5 bytes (40bit key) */
-	rc4_ctx->key_len = 5;
-
-}
-
-static void
-rc4_uninit(PurpleCipherContext *context) {
-	struct RC4Context *rc4_ctx;
-
-	rc4_ctx = purple_cipher_context_get_data(context);
-	memset(rc4_ctx, 0, sizeof(rc4_ctx));
-
-	g_free(rc4_ctx);
-	rc4_ctx = NULL;
-}
-
-
-
-static void
-rc4_set_key (PurpleCipherContext *context, const guchar * key) {
-	struct RC4Context *ctx;
-	guchar *state;
-	guchar temp_swap;
-	guchar x, y;
-	guint i;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	x = 0;
-	y = 0;
-	state = &ctx->state[0];
-	for(i = 0; i < 256; i++)
-	{
-		y = (key[x] + state[i] + y) % 256;
-		temp_swap = state[i];
-		state[i] = state[y];
-		state[y] = temp_swap;
-		x = (x + 1) % ctx->key_len;
-	}
-}
-
-static void
-rc4_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
-	struct RC4Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(purple_strequal(name, "key_len")) {
-		ctx->key_len = GPOINTER_TO_INT(value);
-	}
-}
-
-static size_t
-rc4_get_key_size (PurpleCipherContext *context)
-{
-	struct RC4Context *ctx;
-
-	g_return_val_if_fail(context, -1);
-
-	ctx = purple_cipher_context_get_data(context);
-
-	g_return_val_if_fail(ctx, -1);
-
-	return ctx->key_len;
-}
-
-static void *
-rc4_get_opt(PurpleCipherContext *context, const gchar *name) {
-	struct RC4Context *ctx;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	if(purple_strequal(name, "key_len")) {
-		return GINT_TO_POINTER(ctx->key_len);
-	}
-
-	return NULL;
-}
-
-static gint
-rc4_encrypt(PurpleCipherContext *context, const guchar data[],
-	    size_t len, guchar output[], size_t *outlen) {
-	struct RC4Context *ctx;
-	guchar temp_swap;
-	guchar x, y, z;
-	guchar *state;
-	guint i;
-
-	ctx = purple_cipher_context_get_data(context);
-
-	x = ctx->x;
-	y = ctx->y;
-	state = &ctx->state[0];
-
-	for(i = 0; i < len; i++)
-	{
-		x = (x + 1) % 256;
-		y = (state[x] + y) % 256;
-		temp_swap = state[x];
-		state[x] = state[y];
-		state[y] = temp_swap;
-		z = state[x] + (state[y]) % 256;
-		output[i] = data[i] ^ state[z];
-	}
-	ctx->x = x;
-	ctx->y = y;
-	if(outlen)
-		*outlen = len;
-
-	return 0;
-}
-
-static PurpleCipherOps RC4Ops = {
-	rc4_set_opt,   /* Set Option    */
-	rc4_get_opt,   /* Get Option    */
-	rc4_init,      /* init          */
-	rc4_reset,     /* reset         */
-	rc4_uninit,    /* uninit        */
-	NULL,          /* set iv        */
-	NULL,          /* append        */
-	NULL,          /* digest        */
-	rc4_encrypt,   /* encrypt       */
-	NULL,          /* decrypt       */
-	NULL,          /* set salt      */
-	NULL,          /* get salt size */
-	rc4_set_key,   /* set key       */
-	rc4_get_key_size, /* get key size  */
-	NULL,          /* set batch mode */
-	NULL,          /* get batch mode */
-	NULL,          /* get block size */
-	NULL           /* set key with len */
-};
-
 /*******************************************************************************
  * Structs
  ******************************************************************************/
@@ -2688,6 +223,20 @@
 	return &handle;
 }
 
+/* These are implemented in the purple-ciphers sublibrary built in the ciphers
+ * directory.  We could put a header file in there, but it's less hassle for
+ * the developer to just add it here since they have to register it here as
+ * well.
+ */
+PurpleCipherOps *purple_des_cipher_get_ops();
+PurpleCipherOps *purple_des3_cipher_get_ops();
+PurpleCipherOps *purple_hmac_cipher_get_ops();
+PurpleCipherOps *purple_md4_cipher_get_ops();
+PurpleCipherOps *purple_md5_cipher_get_ops();
+PurpleCipherOps *purple_rc4_cipher_get_ops();
+PurpleCipherOps *purple_sha1_cipher_get_ops();
+PurpleCipherOps *purple_sha256_cipher_get_ops();
+
 void
 purple_ciphers_init() {
 	gpointer handle;
@@ -2703,14 +252,14 @@
 						 purple_value_new(PURPLE_TYPE_SUBTYPE,
 										PURPLE_SUBTYPE_CIPHER));
 
-	purple_ciphers_register_cipher("md5", &MD5Ops);
-	purple_ciphers_register_cipher("sha1", &SHA1Ops);
-	purple_ciphers_register_cipher("sha256", &SHA256Ops);
-	purple_ciphers_register_cipher("md4", &MD4Ops);
-	purple_ciphers_register_cipher("hmac", &HMACOps);
-	purple_ciphers_register_cipher("des", &DESOps);
-	purple_ciphers_register_cipher("des3", &DES3Ops);
-	purple_ciphers_register_cipher("rc4", &RC4Ops);
+	purple_ciphers_register_cipher("md5", purple_md5_cipher_get_ops());
+	purple_ciphers_register_cipher("sha1", purple_sha1_cipher_get_ops());
+	purple_ciphers_register_cipher("sha256", purple_sha256_cipher_get_ops());
+	purple_ciphers_register_cipher("md4", purple_md4_cipher_get_ops());
+	purple_ciphers_register_cipher("hmac", purple_hmac_cipher_get_ops());
+	purple_ciphers_register_cipher("des", purple_des_cipher_get_ops());
+	purple_ciphers_register_cipher("des3", purple_des3_cipher_get_ops());
+	purple_ciphers_register_cipher("rc4", purple_rc4_cipher_get_ops());
 }
 
 void
@@ -2729,6 +278,7 @@
 
 	purple_signals_unregister_by_instance(purple_ciphers_get_handle());
 }
+
 /******************************************************************************
  * PurpleCipherContext API
  *****************************************************************************/
@@ -2828,7 +378,7 @@
 	if(cipher->ops && cipher->ops->uninit)
 		cipher->ops->uninit(context);
 
-	memset(context, 0, sizeof(context));
+	memset(context, 0, sizeof(*context));
 	g_free(context);
 	context = NULL;
 }
--- a/libpurple/cipher.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/cipher.h	Sun Mar 13 18:14:04 2011 +0000
@@ -28,6 +28,7 @@
 #define PURPLE_CIPHER_H
 
 #include <glib.h>
+#include <string.h>
 
 #define PURPLE_CIPHER(obj)			((PurpleCipher *)(obj))			/**< PurpleCipher typecast helper			*/
 #define PURPLE_CIPHER_OPS(obj)		((PurpleCipherOps *)(obj))		/**< PurpleCipherInfo typecase helper		*/
@@ -129,9 +130,7 @@
 	void (*set_key_with_len)(PurpleCipherContext *context, const guchar *key, size_t len);
 };
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 /*****************************************************************************/
 /** @name PurpleCipher API													 */
@@ -498,8 +497,6 @@
 
 /*@}*/
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* PURPLE_CIPHER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,17 @@
+noinst_LTLIBRARIES=libpurple-ciphers.la
+
+libpurple_ciphers_la_SOURCES=\
+	des.c \
+	gchecksum.c \
+	hmac.c \
+	md4.c \
+	md5.c \
+	rc4.c \
+	sha1.c \
+	sha256.c
+
+INCLUDES = -I$(top_srcdir)/libpurple
+
+AM_CPPFLAGS = \
+	$(GLIB_CFLAGS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/des.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,846 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * Original des taken from gpg
+ *
+ * des.c - DES and Triple-DES encryption/decryption Algorithm
+ *  Copyright (C) 1998 Free Software Foundation, Inc.
+ *
+ *  Please see below for more legal information!
+ *
+ *   According to the definition of DES in FIPS PUB 46-2 from December 1993.
+ *   For a description of triple encryption, see:
+ *     Bruce Schneier: Applied Cryptography. Second Edition.
+ *     John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff.
+ *
+ *   This file is part of GnuPG.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+
+/******************************************************************************
+ * DES
+ *****************************************************************************/
+typedef struct _des_ctx
+{
+	guint32 encrypt_subkeys[32];
+	guint32 decrypt_subkeys[32];
+} des_ctx[1];
+
+/*
+ *  The s-box values are permuted according to the 'primitive function P'
+ */
+static const guint32 sbox1[64] =
+{
+	0x00808200, 0x00000000, 0x00008000, 0x00808202, 0x00808002, 0x00008202, 0x00000002, 0x00008000,
+	0x00000200, 0x00808200, 0x00808202, 0x00000200, 0x00800202, 0x00808002, 0x00800000, 0x00000002,
+	0x00000202, 0x00800200, 0x00800200, 0x00008200, 0x00008200, 0x00808000, 0x00808000, 0x00800202,
+	0x00008002, 0x00800002, 0x00800002, 0x00008002, 0x00000000, 0x00000202, 0x00008202, 0x00800000,
+	0x00008000, 0x00808202, 0x00000002, 0x00808000, 0x00808200, 0x00800000, 0x00800000, 0x00000200,
+	0x00808002, 0x00008000, 0x00008200, 0x00800002, 0x00000200, 0x00000002, 0x00800202, 0x00008202,
+	0x00808202, 0x00008002, 0x00808000, 0x00800202, 0x00800002, 0x00000202, 0x00008202, 0x00808200,
+	0x00000202, 0x00800200, 0x00800200, 0x00000000, 0x00008002, 0x00008200, 0x00000000, 0x00808002
+};
+
+static const guint32 sbox2[64] =
+{
+	0x40084010, 0x40004000, 0x00004000, 0x00084010, 0x00080000, 0x00000010, 0x40080010, 0x40004010,
+	0x40000010, 0x40084010, 0x40084000, 0x40000000, 0x40004000, 0x00080000, 0x00000010, 0x40080010,
+	0x00084000, 0x00080010, 0x40004010, 0x00000000, 0x40000000, 0x00004000, 0x00084010, 0x40080000,
+	0x00080010, 0x40000010, 0x00000000, 0x00084000, 0x00004010, 0x40084000, 0x40080000, 0x00004010,
+	0x00000000, 0x00084010, 0x40080010, 0x00080000, 0x40004010, 0x40080000, 0x40084000, 0x00004000,
+	0x40080000, 0x40004000, 0x00000010, 0x40084010, 0x00084010, 0x00000010, 0x00004000, 0x40000000,
+	0x00004010, 0x40084000, 0x00080000, 0x40000010, 0x00080010, 0x40004010, 0x40000010, 0x00080010,
+	0x00084000, 0x00000000, 0x40004000, 0x00004010, 0x40000000, 0x40080010, 0x40084010, 0x00084000
+};
+
+static const guint32 sbox3[64] =
+{
+	0x00000104, 0x04010100, 0x00000000, 0x04010004, 0x04000100, 0x00000000, 0x00010104, 0x04000100,
+	0x00010004, 0x04000004, 0x04000004, 0x00010000, 0x04010104, 0x00010004, 0x04010000, 0x00000104,
+	0x04000000, 0x00000004, 0x04010100, 0x00000100, 0x00010100, 0x04010000, 0x04010004, 0x00010104,
+	0x04000104, 0x00010100, 0x00010000, 0x04000104, 0x00000004, 0x04010104, 0x00000100, 0x04000000,
+	0x04010100, 0x04000000, 0x00010004, 0x00000104, 0x00010000, 0x04010100, 0x04000100, 0x00000000,
+	0x00000100, 0x00010004, 0x04010104, 0x04000100, 0x04000004, 0x00000100, 0x00000000, 0x04010004,
+	0x04000104, 0x00010000, 0x04000000, 0x04010104, 0x00000004, 0x00010104, 0x00010100, 0x04000004,
+	0x04010000, 0x04000104, 0x00000104, 0x04010000, 0x00010104, 0x00000004, 0x04010004, 0x00010100
+};
+
+static const guint32 sbox4[64] =
+{
+	0x80401000, 0x80001040, 0x80001040, 0x00000040, 0x00401040, 0x80400040, 0x80400000, 0x80001000,
+	0x00000000, 0x00401000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00400040, 0x80400000,
+	0x80000000, 0x00001000, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x80001000, 0x00001040,
+	0x80400040, 0x80000000, 0x00001040, 0x00400040, 0x00001000, 0x00401040, 0x80401040, 0x80000040,
+	0x00400040, 0x80400000, 0x00401000, 0x80401040, 0x80000040, 0x00000000, 0x00000000, 0x00401000,
+	0x00001040, 0x00400040, 0x80400040, 0x80000000, 0x80401000, 0x80001040, 0x80001040, 0x00000040,
+	0x80401040, 0x80000040, 0x80000000, 0x00001000, 0x80400000, 0x80001000, 0x00401040, 0x80400040,
+	0x80001000, 0x00001040, 0x00400000, 0x80401000, 0x00000040, 0x00400000, 0x00001000, 0x00401040
+};
+
+static const guint32 sbox5[64] =
+{
+	0x00000080, 0x01040080, 0x01040000, 0x21000080, 0x00040000, 0x00000080, 0x20000000, 0x01040000,
+	0x20040080, 0x00040000, 0x01000080, 0x20040080, 0x21000080, 0x21040000, 0x00040080, 0x20000000,
+	0x01000000, 0x20040000, 0x20040000, 0x00000000, 0x20000080, 0x21040080, 0x21040080, 0x01000080,
+	0x21040000, 0x20000080, 0x00000000, 0x21000000, 0x01040080, 0x01000000, 0x21000000, 0x00040080,
+	0x00040000, 0x21000080, 0x00000080, 0x01000000, 0x20000000, 0x01040000, 0x21000080, 0x20040080,
+	0x01000080, 0x20000000, 0x21040000, 0x01040080, 0x20040080, 0x00000080, 0x01000000, 0x21040000,
+	0x21040080, 0x00040080, 0x21000000, 0x21040080, 0x01040000, 0x00000000, 0x20040000, 0x21000000,
+	0x00040080, 0x01000080, 0x20000080, 0x00040000, 0x00000000, 0x20040000, 0x01040080, 0x20000080
+};
+
+static const guint32 sbox6[64] =
+{
+	0x10000008, 0x10200000, 0x00002000, 0x10202008, 0x10200000, 0x00000008, 0x10202008, 0x00200000,
+	0x10002000, 0x00202008, 0x00200000, 0x10000008, 0x00200008, 0x10002000, 0x10000000, 0x00002008,
+	0x00000000, 0x00200008, 0x10002008, 0x00002000, 0x00202000, 0x10002008, 0x00000008, 0x10200008,
+	0x10200008, 0x00000000, 0x00202008, 0x10202000, 0x00002008, 0x00202000, 0x10202000, 0x10000000,
+	0x10002000, 0x00000008, 0x10200008, 0x00202000, 0x10202008, 0x00200000, 0x00002008, 0x10000008,
+	0x00200000, 0x10002000, 0x10000000, 0x00002008, 0x10000008, 0x10202008, 0x00202000, 0x10200000,
+	0x00202008, 0x10202000, 0x00000000, 0x10200008, 0x00000008, 0x00002000, 0x10200000, 0x00202008,
+	0x00002000, 0x00200008, 0x10002008, 0x00000000, 0x10202000, 0x10000000, 0x00200008, 0x10002008
+};
+
+static const guint32 sbox7[64] =
+{
+	0x00100000, 0x02100001, 0x02000401, 0x00000000, 0x00000400, 0x02000401, 0x00100401, 0x02100400,
+	0x02100401, 0x00100000, 0x00000000, 0x02000001, 0x00000001, 0x02000000, 0x02100001, 0x00000401,
+	0x02000400, 0x00100401, 0x00100001, 0x02000400, 0x02000001, 0x02100000, 0x02100400, 0x00100001,
+	0x02100000, 0x00000400, 0x00000401, 0x02100401, 0x00100400, 0x00000001, 0x02000000, 0x00100400,
+	0x02000000, 0x00100400, 0x00100000, 0x02000401, 0x02000401, 0x02100001, 0x02100001, 0x00000001,
+	0x00100001, 0x02000000, 0x02000400, 0x00100000, 0x02100400, 0x00000401, 0x00100401, 0x02100400,
+	0x00000401, 0x02000001, 0x02100401, 0x02100000, 0x00100400, 0x00000000, 0x00000001, 0x02100401,
+	0x00000000, 0x00100401, 0x02100000, 0x00000400, 0x02000001, 0x02000400, 0x00000400, 0x00100001
+};
+
+static const guint32 sbox8[64] =
+{
+	0x08000820, 0x00000800, 0x00020000, 0x08020820, 0x08000000, 0x08000820, 0x00000020, 0x08000000,
+	0x00020020, 0x08020000, 0x08020820, 0x00020800, 0x08020800, 0x00020820, 0x00000800, 0x00000020,
+	0x08020000, 0x08000020, 0x08000800, 0x00000820, 0x00020800, 0x00020020, 0x08020020, 0x08020800,
+	0x00000820, 0x00000000, 0x00000000, 0x08020020, 0x08000020, 0x08000800, 0x00020820, 0x00020000,
+	0x00020820, 0x00020000, 0x08020800, 0x00000800, 0x00000020, 0x08020020, 0x00000800, 0x00020820,
+	0x08000800, 0x00000020, 0x08000020, 0x08020000, 0x08020020, 0x08000000, 0x00020000, 0x08000820,
+	0x00000000, 0x08020820, 0x00020020, 0x08000020, 0x08020000, 0x08000800, 0x08000820, 0x00000000,
+	0x08020820, 0x00020800, 0x00020800, 0x00000820, 0x00000820, 0x00020020, 0x08000000, 0x08020800
+};
+
+
+/*
+ *  * These two tables are part of the 'permuted choice 1' function.
+ *   * In this implementation several speed improvements are done.
+ *    */
+static const guint32 leftkey_swap[16] =
+{
+	0x00000000, 0x00000001, 0x00000100, 0x00000101,
+	0x00010000, 0x00010001, 0x00010100, 0x00010101,
+	0x01000000, 0x01000001, 0x01000100, 0x01000101,
+	0x01010000, 0x01010001, 0x01010100, 0x01010101
+};
+
+static const guint32 rightkey_swap[16] =
+{
+	0x00000000, 0x01000000, 0x00010000, 0x01010000,
+	0x00000100, 0x01000100, 0x00010100, 0x01010100,
+	0x00000001, 0x01000001, 0x00010001, 0x01010001,
+	0x00000101, 0x01000101, 0x00010101, 0x01010101,
+};
+
+
+/*
+ *  Numbers of left shifts per round for encryption subkey schedule
+ *  To calculate the decryption key scheduling we just reverse the
+ *  ordering of the subkeys so we can omit the table for decryption
+ *  subkey schedule.
+ */
+static const guint8 encrypt_rotate_tab[16] =
+{
+	1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+};
+
+/*
+ *  Macro to swap bits across two words
+ **/
+#define DO_PERMUTATION(a, temp, b, offset, mask)    \
+	temp = ((a>>offset) ^ b) & mask;            \
+	b ^= temp;                      \
+	a ^= temp<<offset;
+
+
+/*
+ *  This performs the 'initial permutation' for the data to be encrypted or decrypted
+ **/
+#define INITIAL_PERMUTATION(left, temp, right)      \
+	DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)    \
+	DO_PERMUTATION(left, temp, right, 16, 0x0000ffff)   \
+	DO_PERMUTATION(right, temp, left, 2, 0x33333333)    \
+	DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff)    \
+	DO_PERMUTATION(left, temp, right, 1, 0x55555555)
+
+
+/*
+ * The 'inverse initial permutation'
+ **/
+#define FINAL_PERMUTATION(left, temp, right)        \
+	DO_PERMUTATION(left, temp, right, 1, 0x55555555)    \
+	DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff)    \
+	DO_PERMUTATION(right, temp, left, 2, 0x33333333)    \
+	DO_PERMUTATION(left, temp, right, 16, 0x0000ffff)   \
+	DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f)
+
+
+/*
+ * A full DES round including 'expansion function', 'sbox substitution'
+ * and 'primitive function P' but without swapping the left and right word.
+ **/
+#define DES_ROUND(from, to, work, subkey)       \
+	work = ((from<<1) | (from>>31)) ^ *subkey++;    \
+	to ^= sbox8[  work      & 0x3f ];           \
+	to ^= sbox6[ (work>>8)  & 0x3f ];           \
+	to ^= sbox4[ (work>>16) & 0x3f ];           \
+	to ^= sbox2[ (work>>24) & 0x3f ];           \
+	work = ((from>>3) | (from<<29)) ^ *subkey++;    \
+	to ^= sbox7[  work      & 0x3f ];           \
+	to ^= sbox5[ (work>>8)  & 0x3f ];           \
+	to ^= sbox3[ (work>>16) & 0x3f ];           \
+	to ^= sbox1[ (work>>24) & 0x3f ];
+
+
+/*
+ * Macros to convert 8 bytes from/to 32bit words
+ **/
+#define READ_64BIT_DATA(data, left, right)                  \
+	left  = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];   \
+	right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
+
+#define WRITE_64BIT_DATA(data, left, right)                 \
+	data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff;         \
+	data[2] = (left >> 8) &0xff; data[3] = left &0xff;              \
+	data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff;       \
+	data[6] = (right >> 8) &0xff; data[7] = right &0xff;
+
+
+/*
+ * des_key_schedule():    Calculate 16 subkeys pairs (even/odd) for
+ *            16 encryption rounds.
+ *            To calculate subkeys for decryption the caller
+ *                have to reorder the generated subkeys.
+ *
+ *        rawkey:       8 Bytes of key data
+ *        subkey:       Array of at least 32 guint32s. Will be filled
+ *              with calculated subkeys.
+ *
+ **/
+static void
+des_key_schedule (const guint8 * rawkey, guint32 * subkey)
+{
+	guint32 left, right, work;
+	int round;
+
+	READ_64BIT_DATA (rawkey, left, right)
+
+	DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f)
+	DO_PERMUTATION (right, work, left, 0, 0x10101010)
+
+	left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2)
+	| (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf])
+	| (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6)
+	| (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4);
+
+	left &= 0x0fffffff;
+
+	right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2)
+		| (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf])
+		| (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6)
+		| (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4);
+
+	right &= 0x0fffffff;
+
+	for (round = 0; round < 16; ++round)
+	{
+        left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
+        right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff;
+
+		*subkey++ = ((left << 4) & 0x24000000)
+			| ((left << 28) & 0x10000000)
+			| ((left << 14) & 0x08000000)
+			| ((left << 18) & 0x02080000)
+			| ((left << 6) & 0x01000000)
+			| ((left << 9) & 0x00200000)
+			| ((left >> 1) & 0x00100000)
+			| ((left << 10) & 0x00040000)
+			| ((left << 2) & 0x00020000)
+			| ((left >> 10) & 0x00010000)
+			| ((right >> 13) & 0x00002000)
+			| ((right >> 4) & 0x00001000)
+			| ((right << 6) & 0x00000800)
+			| ((right >> 1) & 0x00000400)
+			| ((right >> 14) & 0x00000200)
+			| (right & 0x00000100)
+			| ((right >> 5) & 0x00000020)
+			| ((right >> 10) & 0x00000010)
+			| ((right >> 3) & 0x00000008)
+			| ((right >> 18) & 0x00000004)
+			| ((right >> 26) & 0x00000002)
+			| ((right >> 24) & 0x00000001);
+
+		*subkey++ = ((left << 15) & 0x20000000)
+			| ((left << 17) & 0x10000000)
+			| ((left << 10) & 0x08000000)
+			| ((left << 22) & 0x04000000)
+			| ((left >> 2) & 0x02000000)
+			| ((left << 1) & 0x01000000)
+			| ((left << 16) & 0x00200000)
+			| ((left << 11) & 0x00100000)
+			| ((left << 3) & 0x00080000)
+			| ((left >> 6) & 0x00040000)
+			| ((left << 15) & 0x00020000)
+			| ((left >> 4) & 0x00010000)
+			| ((right >> 2) & 0x00002000)
+			| ((right << 8) & 0x00001000)
+			| ((right >> 14) & 0x00000808)
+			| ((right >> 9) & 0x00000400)
+			| ((right) & 0x00000200)
+			| ((right << 7) & 0x00000100)
+			| ((right >> 7) & 0x00000020)
+			| ((right >> 3) & 0x00000011)
+			| ((right << 2) & 0x00000004)
+			| ((right >> 21) & 0x00000002);
+	}
+}
+
+
+/*
+ *  Fill a DES context with subkeys calculated from a 64bit key.
+ *  Does not check parity bits, but simply ignore them.
+ *  Does not check for weak keys.
+ **/
+static void
+des_set_key (PurpleCipherContext *context, const guchar * key)
+{
+	struct _des_ctx *ctx = purple_cipher_context_get_data(context);
+	int i;
+
+	des_key_schedule (key, ctx->encrypt_subkeys);
+
+	for(i=0; i<32; i+=2)
+	{
+		ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i];
+		ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i];
+	}
+}
+
+
+/*
+ *  Electronic Codebook Mode DES encryption/decryption of data according
+ *  to 'mode'.
+ **/
+static int
+des_ecb_crypt (struct _des_ctx *ctx, const guint8 * from, guint8 * to, int mode)
+{
+	guint32 left, right, work;
+	guint32 *keys;
+
+	keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys;
+
+	READ_64BIT_DATA (from, left, right)
+	INITIAL_PERMUTATION (left, work, right)
+
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+	DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys)
+
+	FINAL_PERMUTATION (right, work, left)
+	WRITE_64BIT_DATA (to, right, left)
+
+	return 0;
+}
+
+static gint
+des_encrypt(PurpleCipherContext *context, const guchar data[],
+            size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8] = {0,0,0,0,0,0,0,0};
+	while(offset+8<=len) {
+		des_ecb_crypt(purple_cipher_context_get_data(context),
+		              data+offset,
+		              output+offset,
+		              0);
+		offset+=8;
+	}
+	*outlen = len;
+	if(offset<len) {
+		*outlen += len - offset;
+		tmp = offset;
+		while(tmp<len) {
+			buf[i++] = data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(purple_cipher_context_get_data(context),
+		              buf,
+		              output+offset,
+		              0);
+	}
+	return 0;
+}
+
+static gint
+des_decrypt(PurpleCipherContext *context, const guchar data[],
+            size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8] = {0,0,0,0,0,0,0,0};
+	while(offset+8<=len) {
+		des_ecb_crypt(purple_cipher_context_get_data(context),
+		              data+offset,
+		              output+offset,
+		              1);
+		offset+=8;
+	}
+	*outlen = len;
+	if(offset<len) {
+		*outlen += len - offset;
+		tmp = offset;
+		while(tmp<len) {
+			buf[i++] = data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(purple_cipher_context_get_data(context),
+		              buf,
+		              output+offset,
+		              1);
+	}
+	return 0;
+}
+
+static void
+des_init(PurpleCipherContext *context, gpointer extra) {
+	struct _des_ctx *mctx;
+	mctx = g_new0(struct _des_ctx, 1);
+	purple_cipher_context_set_data(context, mctx);
+}
+
+static void
+des_uninit(PurpleCipherContext *context) {
+	struct _des_ctx *des_context;
+
+	des_context = purple_cipher_context_get_data(context);
+	memset(des_context, 0, sizeof(*des_context));
+
+	g_free(des_context);
+	des_context = NULL;
+}
+
+static PurpleCipherOps DESOps = {
+	NULL,              /* Set option */
+	NULL,              /* Get option */
+	des_init,          /* init */
+ 	NULL,              /* reset */
+	des_uninit,        /* uninit */
+	NULL,              /* set iv */
+	NULL,              /* append */
+	NULL,              /* digest */
+	des_encrypt,       /* encrypt */
+	des_decrypt,       /* decrypt */
+	NULL,              /* set salt */
+	NULL,              /* get salt size */
+	des_set_key,       /* set key */
+	NULL,              /* get key size */
+	NULL,              /* set batch mode */
+	NULL,              /* get batch mode */
+	NULL,              /* get block size */
+	NULL               /* set key with len */
+};
+
+/******************************************************************************
+ * Triple-DES
+ *****************************************************************************/
+
+typedef struct _des3_ctx
+{
+	PurpleCipherBatchMode mode;
+	guchar iv[8];
+	/* First key for encryption */
+	struct _des_ctx key1;
+	/* Second key for decryption */
+	struct _des_ctx key2;
+	/* Third key for encryption */
+	struct _des_ctx key3;
+} des3_ctx[1];
+
+/*
+ *  Fill a DES3 context with subkeys calculated from 3 64bit key.
+ *  Does not check parity bits, but simply ignore them.
+ *  Does not check for weak keys.
+ **/
+static void
+des3_set_key(PurpleCipherContext *context, const guchar * key)
+{
+	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
+	int i;
+
+	des_key_schedule (key +  0, ctx->key1.encrypt_subkeys);
+	des_key_schedule (key +  8, ctx->key2.encrypt_subkeys);
+	des_key_schedule (key + 16, ctx->key3.encrypt_subkeys);
+
+	for (i = 0; i < 32; i += 2)
+	{
+		ctx->key1.decrypt_subkeys[i]    = ctx->key1.encrypt_subkeys[30-i];
+		ctx->key1.decrypt_subkeys[i+1]  = ctx->key1.encrypt_subkeys[31-i];
+		ctx->key2.decrypt_subkeys[i]    = ctx->key2.encrypt_subkeys[30-i];
+		ctx->key2.decrypt_subkeys[i+1]  = ctx->key2.encrypt_subkeys[31-i];
+		ctx->key3.decrypt_subkeys[i]    = ctx->key3.encrypt_subkeys[30-i];
+		ctx->key3.decrypt_subkeys[i+1]  = ctx->key3.encrypt_subkeys[31-i];
+	}
+}
+
+static gint
+des3_ecb_encrypt(struct _des3_ctx *ctx, const guchar data[],
+                 size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8] = {0,0,0,0,0,0,0,0};
+	while (offset + 8 <= len) {
+		des_ecb_crypt(&ctx->key1,
+		              data+offset,
+		              output+offset,
+		              0);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              1);
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              0);
+		offset += 8;
+	}
+	*outlen = len;
+	if (offset < len) {
+		*outlen += len - offset;
+		tmp = offset;
+		memset(buf, 0, 8);
+		while (tmp < len) {
+			buf[i++] = data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              0);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              1);
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              0);
+	}
+	return 0;
+}
+
+static gint
+des3_cbc_encrypt(struct _des3_ctx *ctx, const guchar data[],
+                 size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8];
+	memcpy(buf, ctx->iv, 8);
+	while (offset + 8 <= len) {
+		for (i = 0; i < 8; i++)
+			buf[i] ^= data[offset + i];
+
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              0);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              1);
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              0);
+		memcpy(buf, output+offset, 8);
+		offset += 8;
+	}
+	*outlen = len;
+	if (offset < len) {
+		*outlen += len - offset;
+		tmp = offset;
+		i = 0;
+		while (tmp < len) {
+			buf[i++] ^= data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              0);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              1);
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              0);
+	}
+	return 0;
+}
+
+static gint
+des3_encrypt(PurpleCipherContext *context, const guchar data[],
+             size_t len, guchar output[], size_t *outlen)
+{
+	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
+
+	if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
+		return des3_ecb_encrypt(ctx, data, len, output, outlen);
+	} else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
+		return des3_cbc_encrypt(ctx, data, len, output, outlen);
+	} else {
+		g_return_val_if_reached(0);
+	}
+
+	return 0;
+}
+
+static gint
+des3_ecb_decrypt(struct _des3_ctx *ctx, const guchar data[],
+                 size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8] = {0,0,0,0,0,0,0,0};
+	while (offset + 8 <= len) {
+		/* NOTE: Apply key in reverse */
+		des_ecb_crypt(&ctx->key3,
+		              data+offset,
+		              output+offset,
+		              1);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              0);
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              1);
+		offset+=8;
+	}
+	*outlen = len;
+	if (offset < len) {
+		*outlen += len - offset;
+		tmp = offset;
+		memset(buf, 0, 8);
+		while (tmp < len) {
+			buf[i++] = data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              1);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              0);
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              1);
+	}
+	return 0;
+}
+
+static gint
+des3_cbc_decrypt(struct _des3_ctx *ctx, const guchar data[],
+                 size_t len, guchar output[], size_t *outlen)
+{
+	int offset = 0;
+	int i = 0;
+	int tmp;
+	guint8 buf[8] = {0,0,0,0,0,0,0,0};
+	guint8 link[8];
+	memcpy(link, ctx->iv, 8);
+	while (offset + 8 <= len) {
+		des_ecb_crypt(&ctx->key3,
+		              data+offset,
+		              output+offset,
+		              1);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              0);
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              1);
+		for (i = 0; i < 8; i++)
+			output[offset + i] ^= link[i];
+		memcpy(link, data + offset, 8);
+		offset+=8;
+	}
+	*outlen = len;
+	if(offset<len) {
+		*outlen += len - offset;
+		tmp = offset;
+		memset(buf, 0, 8);
+		i = 0;
+		while(tmp<len) {
+			buf[i++] = data[tmp];
+			tmp++;
+		}
+		des_ecb_crypt(&ctx->key3,
+		              buf,
+		              output+offset,
+		              1);
+		des_ecb_crypt(&ctx->key2,
+		              output+offset,
+		              buf,
+		              0);
+		des_ecb_crypt(&ctx->key1,
+		              buf,
+		              output+offset,
+		              1);
+		for (i = 0; i < 8; i++)
+			output[offset + i] ^= link[i];
+	}
+	return 0;
+}
+
+static gint
+des3_decrypt(PurpleCipherContext *context, const guchar data[],
+             size_t len, guchar output[], size_t *outlen)
+{
+	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
+
+	if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_ECB) {
+		return des3_ecb_decrypt(ctx, data, len, output, outlen);
+	} else if (ctx->mode == PURPLE_CIPHER_BATCH_MODE_CBC) {
+		return des3_cbc_decrypt(ctx, data, len, output, outlen);
+	} else {
+		g_return_val_if_reached(0);
+	}
+
+	return 0;
+}
+
+static void
+des3_set_batch(PurpleCipherContext *context, PurpleCipherBatchMode mode)
+{
+	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
+
+	ctx->mode = mode;
+}
+
+static PurpleCipherBatchMode
+des3_get_batch(PurpleCipherContext *context)
+{
+	struct _des3_ctx *ctx = purple_cipher_context_get_data(context);
+
+	return ctx->mode;
+}
+
+static void
+des3_set_iv(PurpleCipherContext *context, guchar *iv, size_t len)
+{
+	struct _des3_ctx *ctx;
+
+	g_return_if_fail(len == 8);
+
+	ctx = purple_cipher_context_get_data(context);
+
+	memcpy(ctx->iv, iv, len);
+}
+
+static void
+des3_init(PurpleCipherContext *context, gpointer extra)
+{
+	struct _des3_ctx *mctx;
+	mctx = g_new0(struct _des3_ctx, 1);
+	purple_cipher_context_set_data(context, mctx);
+}
+
+static void
+des3_uninit(PurpleCipherContext *context)
+{
+	struct _des3_ctx *des3_context;
+
+	des3_context = purple_cipher_context_get_data(context);
+	memset(des3_context, 0, sizeof(*des3_context));
+
+	g_free(des3_context);
+	des3_context = NULL;
+}
+
+static PurpleCipherOps DES3Ops = {
+	NULL,              /* Set option */
+	NULL,              /* Get option */
+	des3_init,         /* init */
+	NULL,              /* reset */
+	des3_uninit,       /* uninit */
+	des3_set_iv,       /* set iv */
+	NULL,              /* append */
+	NULL,              /* digest */
+	des3_encrypt,      /* encrypt */
+	des3_decrypt,      /* decrypt */
+	NULL,              /* set salt */
+	NULL,              /* get salt size */
+	des3_set_key,      /* set key */
+	NULL,              /* get key size */
+	des3_set_batch,    /* set batch mode */
+	des3_get_batch,    /* get batch mode */
+	NULL,              /* get block size */
+	NULL               /* set key with len */
+};
+
+/******************************************************************************
+ * Registration
+ *****************************************************************************/
+PurpleCipherOps *
+purple_des_cipher_get_ops(void) {
+	return &DESOps;
+}
+
+PurpleCipherOps *
+purple_des3_cipher_get_ops(void) {
+	return &DES3Ops;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/gchecksum.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,144 @@
+#include <cipher.h>
+
+#if GLIB_CHECK_VERSION(2,16,0)
+
+static void
+purple_g_checksum_init(PurpleCipherContext *context, GChecksumType type)
+{
+    GChecksum *checksum;
+
+    checksum = g_checksum_new(type);
+    purple_cipher_context_set_data(context, checksum);
+}
+
+static void
+purple_g_checksum_reset(PurpleCipherContext *context, GChecksumType type)
+{
+    GChecksum *checksum;
+
+    checksum = purple_cipher_context_get_data(context);
+    g_return_if_fail(checksum != NULL);
+
+#if GLIB_CHECK_VERSION(2,18,0)
+    g_checksum_reset(checksum);
+#else
+    g_checksum_free(checksum);
+    checksum = g_checksum_new(type);
+    purple_cipher_context_set_data(context, checksum);
+#endif
+}
+
+static void
+purple_g_checksum_uninit(PurpleCipherContext *context)
+{
+    GChecksum *checksum;
+
+    checksum = purple_cipher_context_get_data(context);
+    g_return_if_fail(checksum != NULL);
+
+    g_checksum_free(checksum);
+}
+
+static void
+purple_g_checksum_append(PurpleCipherContext *context, const guchar *data,
+                         gsize len)
+{
+    GChecksum *checksum;
+
+    checksum = purple_cipher_context_get_data(context);
+    g_return_if_fail(checksum != NULL);
+
+    while (len >= G_MAXSSIZE) {
+        g_checksum_update(checksum, data, G_MAXSSIZE);
+        len -= G_MAXSSIZE;
+        data += G_MAXSSIZE;
+    }
+
+    if (len)
+        g_checksum_update(checksum, data, len);
+}
+
+static gboolean
+purple_g_checksum_digest(PurpleCipherContext *context, GChecksumType type,
+                         gsize len, guchar *digest, gsize *out_len)
+{
+    GChecksum *checksum;
+    const gssize required_length = g_checksum_type_get_length(type);
+
+    checksum = purple_cipher_context_get_data(context);
+
+    g_return_val_if_fail(len >= required_length, FALSE);
+    g_return_val_if_fail(checksum != NULL, FALSE);
+
+    g_checksum_get_digest(checksum, digest, &len);
+
+    purple_cipher_context_reset(context, NULL);
+
+    if (out_len)
+        *out_len = len;
+
+    return TRUE;
+}
+
+/******************************************************************************
+ * Macros
+ *****************************************************************************/
+#define PURPLE_G_CHECKSUM_IMPLEMENTATION(lower, camel, type, block_size) \
+	static size_t \
+	lower##_get_block_size(PurpleCipherContext *context) { \
+		return (block_size); \
+	} \
+	\
+	static void \
+	lower##_init(PurpleCipherContext *context, gpointer extra) { \
+		purple_g_checksum_init(context, (type)); \
+	} \
+	\
+	static void \
+	lower##_reset(PurpleCipherContext *context, gpointer extra) { \
+		purple_g_checksum_reset(context, (type)); \
+	} \
+	\
+	static gboolean \
+	lower##_digest(PurpleCipherContext *context, gsize in_len, \
+	                 guchar digest[], size_t *out_len) \
+	{ \
+		return purple_g_checksum_digest(context, (type), in_len, digest, \
+		                                out_len); \
+	} \
+	\
+	static PurpleCipherOps camel##Ops = { \
+		NULL,                     /* Set option */       \
+		NULL,                     /* Get option */       \
+		lower##_init,             /* init */             \
+		lower##_reset,            /* reset */            \
+		purple_g_checksum_uninit, /* uninit */           \
+		NULL,                     /* set iv */           \
+		purple_g_checksum_append, /* append */           \
+		lower##_digest,           /* digest */           \
+		NULL,                     /* encrypt */          \
+		NULL,                     /* decrypt */          \
+		NULL,                     /* set salt */         \
+		NULL,                     /* get salt size */    \
+		NULL,                     /* set key */          \
+		NULL,                     /* get key size */     \
+		NULL,                     /* set batch mode */   \
+		NULL,                     /* get batch mode */   \
+		lower##_get_block_size,   /* get block size */   \
+		NULL                      /* set key with len */ \
+	}; \
+	\
+	PurpleCipherOps * \
+	purple_##lower##_cipher_get_ops(void) { \
+		return &camel##Ops; \
+	}
+
+/******************************************************************************
+ * Macro Expansion
+ *****************************************************************************/
+PURPLE_G_CHECKSUM_IMPLEMENTATION(md5, MD5, G_CHECKSUM_MD5, 64);
+PURPLE_G_CHECKSUM_IMPLEMENTATION(sha1, SHA1, G_CHECKSUM_SHA1, 64);
+PURPLE_G_CHECKSUM_IMPLEMENTATION(sha256, SHA256, G_CHECKSUM_SHA256, 64);
+
+#endif /* GLIB_CHECK_VERSION(2,16,0) */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/hmac.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,218 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+
+#include <util.h>
+
+struct HMAC_Context {
+	PurpleCipherContext *hash;
+	char *name;
+	int blocksize;
+	guchar *opad;
+};
+
+	static void
+hmac_init(PurpleCipherContext *context, gpointer extra)
+{
+	struct HMAC_Context *hctx;
+	hctx = g_new0(struct HMAC_Context, 1);
+	purple_cipher_context_set_data(context, hctx);
+	purple_cipher_context_reset(context, extra);
+}
+
+	static void
+hmac_reset(PurpleCipherContext *context, gpointer extra)
+{
+	struct HMAC_Context *hctx;
+
+	hctx = purple_cipher_context_get_data(context);
+
+	g_free(hctx->name);
+	hctx->name = NULL;
+	if (hctx->hash)
+		purple_cipher_context_destroy(hctx->hash);
+	hctx->hash = NULL;
+	hctx->blocksize = 0;
+	g_free(hctx->opad);
+	hctx->opad = NULL;
+}
+
+	static void
+hmac_set_opt(PurpleCipherContext *context, const gchar *name, void *value)
+{
+	struct HMAC_Context *hctx;
+
+	hctx = purple_cipher_context_get_data(context);
+
+	if (purple_strequal(name, "hash")) {
+		g_free(hctx->name);
+		if (hctx->hash)
+			purple_cipher_context_destroy(hctx->hash);
+		hctx->name = g_strdup((char*)value);
+		hctx->hash = purple_cipher_context_new_by_name((char *)value, NULL);
+		hctx->blocksize = purple_cipher_context_get_block_size(hctx->hash);
+	}
+}
+
+	static void *
+hmac_get_opt(PurpleCipherContext *context, const gchar *name)
+{
+	struct HMAC_Context *hctx;
+
+	hctx = purple_cipher_context_get_data(context);
+
+	if (purple_strequal(name, "hash")) {
+		return hctx->name;
+	}
+
+	return NULL;
+}
+
+	static void
+hmac_append(PurpleCipherContext *context, const guchar *data, size_t len)
+{
+	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(hctx->hash != NULL);
+
+	purple_cipher_context_append(hctx->hash, data, len);
+}
+
+	static gboolean
+hmac_digest(PurpleCipherContext *context, size_t in_len, guchar *out, size_t *out_len)
+{
+	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
+	PurpleCipherContext *hash = hctx->hash;
+	guchar *inner_hash;
+	size_t hash_len;
+	gboolean result;
+
+	g_return_val_if_fail(hash != NULL, FALSE);
+
+	inner_hash = g_malloc(100); /* TODO: Should be enough for now... */
+	result = purple_cipher_context_digest(hash, 100, inner_hash, &hash_len);
+
+	purple_cipher_context_reset(hash, NULL);
+
+	purple_cipher_context_append(hash, hctx->opad, hctx->blocksize);
+	purple_cipher_context_append(hash, inner_hash, hash_len);
+
+	g_free(inner_hash);
+
+	result = result && purple_cipher_context_digest(hash, in_len, out, out_len);
+
+	return result;
+}
+
+	static void
+hmac_uninit(PurpleCipherContext *context)
+{
+	struct HMAC_Context *hctx;
+
+	purple_cipher_context_reset(context, NULL);
+
+	hctx = purple_cipher_context_get_data(context);
+
+	g_free(hctx);
+}
+
+	static void
+hmac_set_key_with_len(PurpleCipherContext *context, const guchar * key, size_t key_len)
+{
+	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
+	int blocksize, i;
+	guchar *ipad;
+	guchar *full_key;
+
+	g_return_if_fail(hctx->hash != NULL);
+
+	g_free(hctx->opad);
+
+	blocksize = hctx->blocksize;
+	ipad = g_malloc(blocksize);
+	hctx->opad = g_malloc(blocksize);
+
+	if (key_len > blocksize) {
+		purple_cipher_context_reset(hctx->hash, NULL);
+		purple_cipher_context_append(hctx->hash, key, key_len);
+		full_key = g_malloc(100); /* TODO: Should be enough for now... */
+		purple_cipher_context_digest(hctx->hash, 100, full_key, &key_len);
+	} else
+		full_key = g_memdup(key, key_len);
+
+	if (key_len < blocksize) {
+		full_key = g_realloc(full_key, blocksize);
+		memset(full_key + key_len, 0, blocksize - key_len);
+	}
+
+	for(i = 0; i < blocksize; i++) {
+		ipad[i] = 0x36 ^ full_key[i];
+		hctx->opad[i] = 0x5c ^ full_key[i];
+	}
+
+	g_free(full_key);
+
+	purple_cipher_context_reset(hctx->hash, NULL);
+	purple_cipher_context_append(hctx->hash, ipad, blocksize);
+	g_free(ipad);
+}
+
+	static void
+hmac_set_key(PurpleCipherContext *context, const guchar * key)
+{
+	hmac_set_key_with_len(context, key, strlen((char *)key));
+}
+
+	static size_t
+hmac_get_block_size(PurpleCipherContext *context)
+{
+	struct HMAC_Context *hctx = purple_cipher_context_get_data(context);
+
+	return hctx->blocksize;
+}
+
+static PurpleCipherOps HMACOps = {
+	hmac_set_opt,           /* Set option */
+	hmac_get_opt,           /* Get option */
+	hmac_init,               /* init */
+	hmac_reset,              /* reset */
+	hmac_uninit,             /* uninit */
+	NULL,                   /* set iv */
+	hmac_append,             /* append */
+	hmac_digest,             /* digest */
+	NULL,                   /* encrypt */
+	NULL,                   /* decrypt */
+	NULL,                   /* set salt */
+	NULL,                   /* get salt size */
+	hmac_set_key,           /* set key */
+	NULL,                   /* get key size */
+	NULL,                   /* set batch mode */
+	NULL,                   /* get batch mode */
+	hmac_get_block_size,    /* get block size */
+	hmac_set_key_with_len   /* set key with len */
+};
+
+PurpleCipherOps *
+purple_hmac_cipher_get_ops(void) {
+	return &HMACOps;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/md4.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,297 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * Original md4 taken from linux kernel
+ * MD4 Message Digest Algorithm (RFC1320).
+ *
+ * Implementation derived from Andrew Tridgell and Steve French's
+ * CIFS MD4 implementation, and the cryptoapi implementation
+ * originally based on the public domain implementation written
+ * by Colin Plumb in 1993.
+ *
+ * Copyright (c) Andrew Tridgell 1997-1998.
+ * Modified by Steve French (sfrench@us.ibm.com) 2002
+ * Copyright (c) Cryptoapi developers.
+ * Copyright (c) 2002 David S. Miller (davem@redhat.com)
+ * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+
+#define MD4_DIGEST_SIZE     16
+#define MD4_HMAC_BLOCK_SIZE 64
+#define MD4_BLOCK_WORDS     16
+#define MD4_HASH_WORDS      4
+
+struct MD4_Context {
+	guint32 hash[MD4_HASH_WORDS];
+	guint32 block[MD4_BLOCK_WORDS];
+	guint64 byte_count;
+};
+
+static inline guint32 lshift(guint32 x, unsigned int s)
+{
+	x &= 0xFFFFFFFF;
+	return ((x << s) & 0xFFFFFFFF) | (x >> (32 - s));
+}
+
+static inline guint32 F(guint32 x, guint32 y, guint32 z)
+{
+	return (x & y) | ((~x) & z);
+}
+
+static inline guint32 G(guint32 x, guint32 y, guint32 z)
+{
+	return (x & y) | (x & z) | (y & z);
+}
+
+static inline guint32 H(guint32 x, guint32 y, guint32 z)
+{
+	return x ^ y ^ z;
+}
+
+#define ROUND1(a,b,c,d,k,s) (a = lshift(a + F(b,c,d) + k, s))
+#define ROUND2(a,b,c,d,k,s) (a = lshift(a + G(b,c,d) + k + (guint32)0x5A827999,s))
+#define ROUND3(a,b,c,d,k,s) (a = lshift(a + H(b,c,d) + k + (guint32)0x6ED9EBA1,s))
+
+static inline void le32_to_cpu_array(guint32 *buf, unsigned int words)
+{
+	while (words--) {
+		*buf=GUINT_FROM_LE(*buf);
+		buf++;
+	}
+}
+
+static inline void cpu_to_le32_array(guint32 *buf, unsigned int words)
+{
+	while (words--) {
+		*buf=GUINT_TO_LE(*buf);
+		buf++;
+	}
+}
+
+static void md4_transform(guint32 *hash, guint32 const *in)
+{
+	guint32 a, b, c, d;
+
+	a = hash[0];
+	b = hash[1];
+	c = hash[2];
+	d = hash[3];
+
+	ROUND1(a, b, c, d, in[0], 3);
+	ROUND1(d, a, b, c, in[1], 7);
+	ROUND1(c, d, a, b, in[2], 11);
+	ROUND1(b, c, d, a, in[3], 19);
+	ROUND1(a, b, c, d, in[4], 3);
+	ROUND1(d, a, b, c, in[5], 7);
+	ROUND1(c, d, a, b, in[6], 11);
+	ROUND1(b, c, d, a, in[7], 19);
+	ROUND1(a, b, c, d, in[8], 3);
+	ROUND1(d, a, b, c, in[9], 7);
+	ROUND1(c, d, a, b, in[10], 11);
+	ROUND1(b, c, d, a, in[11], 19);
+	ROUND1(a, b, c, d, in[12], 3);
+	ROUND1(d, a, b, c, in[13], 7);
+	ROUND1(c, d, a, b, in[14], 11);
+	ROUND1(b, c, d, a, in[15], 19);
+
+	ROUND2(a, b, c, d,in[ 0], 3);
+	ROUND2(d, a, b, c, in[4], 5);
+	ROUND2(c, d, a, b, in[8], 9);
+	ROUND2(b, c, d, a, in[12], 13);
+	ROUND2(a, b, c, d, in[1], 3);
+	ROUND2(d, a, b, c, in[5], 5);
+	ROUND2(c, d, a, b, in[9], 9);
+	ROUND2(b, c, d, a, in[13], 13);
+	ROUND2(a, b, c, d, in[2], 3);
+	ROUND2(d, a, b, c, in[6], 5);
+	ROUND2(c, d, a, b, in[10], 9);
+	ROUND2(b, c, d, a, in[14], 13);
+	ROUND2(a, b, c, d, in[3], 3);
+	ROUND2(d, a, b, c, in[7], 5);
+	ROUND2(c, d, a, b, in[11], 9);
+	ROUND2(b, c, d, a, in[15], 13);
+
+	ROUND3(a, b, c, d,in[ 0], 3);
+	ROUND3(d, a, b, c, in[8], 9);
+	ROUND3(c, d, a, b, in[4], 11);
+	ROUND3(b, c, d, a, in[12], 15);
+	ROUND3(a, b, c, d, in[2], 3);
+	ROUND3(d, a, b, c, in[10], 9);
+	ROUND3(c, d, a, b, in[6], 11);
+	ROUND3(b, c, d, a, in[14], 15);
+	ROUND3(a, b, c, d, in[1], 3);
+	ROUND3(d, a, b, c, in[9], 9);
+	ROUND3(c, d, a, b, in[5], 11);
+	ROUND3(b, c, d, a, in[13], 15);
+	ROUND3(a, b, c, d, in[3], 3);
+	ROUND3(d, a, b, c, in[11], 9);
+	ROUND3(c, d, a, b, in[7], 11);
+	ROUND3(b, c, d, a, in[15], 15);
+
+	hash[0] += a;
+	hash[1] += b;
+	hash[2] += c;
+	hash[3] += d;
+}
+
+static inline void md4_transform_helper(struct MD4_Context *ctx)
+{
+	le32_to_cpu_array(ctx->block, sizeof(ctx->block) / sizeof(guint32));
+	md4_transform(ctx->hash, ctx->block);
+}
+
+static void
+md4_init(PurpleCipherContext *context, gpointer extra) {
+	struct MD4_Context *mctx;
+	mctx = g_new0(struct MD4_Context, 1);
+	purple_cipher_context_set_data(context, mctx);
+	purple_cipher_context_reset(context, extra);
+
+	mctx->hash[0] = 0x67452301;
+	mctx->hash[1] = 0xefcdab89;
+	mctx->hash[2] = 0x98badcfe;
+	mctx->hash[3] = 0x10325476;
+	mctx->byte_count = 0;
+}
+
+static void
+md4_reset(PurpleCipherContext *context, gpointer extra) {
+	struct MD4_Context *mctx;
+
+	mctx = purple_cipher_context_get_data(context);
+
+	mctx->hash[0] = 0x67452301;
+	mctx->hash[1] = 0xefcdab89;
+	mctx->hash[2] = 0x98badcfe;
+	mctx->hash[3] = 0x10325476;
+	mctx->byte_count = 0;
+}
+
+	static void
+md4_append(PurpleCipherContext *context, const guchar *data, size_t len)
+{
+	struct MD4_Context *mctx = purple_cipher_context_get_data(context);
+	const guint32 avail = sizeof(mctx->block) - (mctx->byte_count & 0x3f);
+
+	mctx->byte_count += len;
+
+	if (avail > len) {
+		memcpy((char *)mctx->block + (sizeof(mctx->block) - avail),
+				data, len);
+		return;
+	}
+
+	memcpy((char *)mctx->block + (sizeof(mctx->block) - avail),
+			data, avail);
+
+	md4_transform_helper(mctx);
+	data += avail;
+	len -= avail;
+
+	while (len >= sizeof(mctx->block)) {
+		memcpy(mctx->block, data, sizeof(mctx->block));
+		md4_transform_helper(mctx);
+		data += sizeof(mctx->block);
+		len -= sizeof(mctx->block);
+	}
+
+	memcpy(mctx->block, data, len);
+}
+
+	static gboolean
+md4_digest(PurpleCipherContext *context, size_t in_len, guchar *out,
+		size_t *out_len)
+{
+	struct MD4_Context *mctx = purple_cipher_context_get_data(context);
+	const unsigned int offset = mctx->byte_count & 0x3f;
+	char *p = (char *)mctx->block + offset;
+	int padding = 56 - (offset + 1);
+
+
+	if(in_len<16) return FALSE;
+	if(out_len) *out_len = 16;
+	*p++ = 0x80;
+	if (padding < 0) {
+		memset(p, 0x00, padding + sizeof (guint64));
+		md4_transform_helper(mctx);
+		p = (char *)mctx->block;
+		padding = 56;
+	}
+
+	memset(p, 0, padding);
+	mctx->block[14] = mctx->byte_count << 3;
+	mctx->block[15] = mctx->byte_count >> 29;
+	le32_to_cpu_array(mctx->block, (sizeof(mctx->block) -
+				sizeof(guint64)) / sizeof(guint32));
+	md4_transform(mctx->hash, mctx->block);
+	cpu_to_le32_array(mctx->hash, sizeof(mctx->hash) / sizeof(guint32));
+	memcpy(out, mctx->hash, sizeof(mctx->hash));
+	memset(mctx, 0, sizeof(*mctx));
+	return TRUE;
+}
+
+static void
+md4_uninit(PurpleCipherContext *context) {
+	struct MD4_Context *md4_context;
+
+	purple_cipher_context_reset(context, NULL);
+
+	md4_context = purple_cipher_context_get_data(context);
+	memset(md4_context, 0, sizeof(*md4_context));
+
+	g_free(md4_context);
+	md4_context = NULL;
+}
+
+	static size_t
+md4_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return MD4_HMAC_BLOCK_SIZE;
+}
+
+static PurpleCipherOps MD4Ops = {
+	NULL,                   /* Set option */
+	NULL,                   /* Get option */
+	md4_init,               /* init */
+	md4_reset,              /* reset */
+	md4_uninit,             /* uninit */
+	NULL,                   /* set iv */
+	md4_append,             /* append */
+	md4_digest,             /* digest */
+	NULL,                   /* encrypt */
+	NULL,                   /* decrypt */
+	NULL,                   /* set salt */
+	NULL,                   /* get salt size */
+	NULL,                   /* set key */
+	NULL,                   /* get key size */
+	NULL,                   /* set batch mode */
+	NULL,                   /* get batch mode */
+	md4_get_block_size,     /* get block size */
+	NULL                    /* set key with len */
+};
+
+PurpleCipherOps *
+purple_md4_cipher_get_ops(void) {
+	return &MD4Ops;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/md5.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,326 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * Original md5
+ * Copyright (C) 2001-2003  Christophe Devine <c.devine@cr0.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+
+#if !GLIB_CHECK_VERSION(2,16,0)
+
+#define MD5_HMAC_BLOCK_SIZE 64
+
+struct MD5Context {
+	guint32 total[2];
+	guint32 state[4];
+	guchar buffer[64];
+};
+
+#define MD5_GET_GUINT32(n,b,i) {            \
+	(n) = ((guint32)(b) [(i)    ]      )    \
+	| ((guint32)(b) [(i) + 1] <<  8)    \
+	| ((guint32)(b) [(i) + 2] << 16)    \
+	| ((guint32)(b) [(i) + 3] << 24);   \
+}
+#define MD5_PUT_GUINT32(n,b,i) {            \
+	(b)[(i)    ] = (guchar)((n)      );     \
+	(b)[(i) + 1] = (guchar)((n) >>  8);     \
+	(b)[(i) + 2] = (guchar)((n) >> 16);     \
+	(b)[(i) + 3] = (guchar)((n) >> 24);     \
+}
+
+static size_t
+md5_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return MD5_HMAC_BLOCK_SIZE;
+}
+
+static void
+md5_init(PurpleCipherContext *context, gpointer extra) {
+	struct MD5Context *md5_context;
+
+	md5_context = g_new0(struct MD5Context, 1);
+
+	purple_cipher_context_set_data(context, md5_context);
+
+	purple_cipher_context_reset(context, extra);
+}
+
+static void
+md5_reset(PurpleCipherContext *context, gpointer extra) {
+	struct MD5Context *md5_context;
+
+	md5_context = purple_cipher_context_get_data(context);
+
+	md5_context->total[0] = 0;
+	md5_context->total[1] = 0;
+
+	md5_context->state[0] = 0x67452301;
+	md5_context->state[1] = 0xEFCDAB89;
+	md5_context->state[2] = 0x98BADCFE;
+	md5_context->state[3] = 0x10325476;
+
+	memset(md5_context->buffer, 0, sizeof(md5_context->buffer));
+}
+
+static void
+md5_uninit(PurpleCipherContext *context) {
+	struct MD5Context *md5_context;
+
+	purple_cipher_context_reset(context, NULL);
+
+	md5_context = purple_cipher_context_get_data(context);
+	memset(md5_context, 0, sizeof(*md5_context));
+
+	g_free(md5_context);
+	md5_context = NULL;
+}
+
+static void
+md5_process(struct MD5Context *md5_context, const guchar data[64]) {
+	guint32 X[16], A, B, C, D;
+
+	A = md5_context->state[0];
+	B = md5_context->state[1];
+	C = md5_context->state[2];
+	D = md5_context->state[3];
+
+	MD5_GET_GUINT32(X[ 0], data,  0);
+	MD5_GET_GUINT32(X[ 1], data,  4);
+	MD5_GET_GUINT32(X[ 2], data,  8);
+	MD5_GET_GUINT32(X[ 3], data, 12);
+	MD5_GET_GUINT32(X[ 4], data, 16);
+	MD5_GET_GUINT32(X[ 5], data, 20);
+	MD5_GET_GUINT32(X[ 6], data, 24);
+	MD5_GET_GUINT32(X[ 7], data, 28);
+	MD5_GET_GUINT32(X[ 8], data, 32);
+	MD5_GET_GUINT32(X[ 9], data, 36);
+	MD5_GET_GUINT32(X[10], data, 40);
+	MD5_GET_GUINT32(X[11], data, 44);
+	MD5_GET_GUINT32(X[12], data, 48);
+	MD5_GET_GUINT32(X[13], data, 52);
+	MD5_GET_GUINT32(X[14], data, 56);
+	MD5_GET_GUINT32(X[15], data, 60);
+
+#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+#define P(a,b,c,d,k,s,t) {      \
+	a += F(b,c,d) + X[k] + t;   \
+	a = S(a,s) + b;             \
+}
+
+	/* first pass */
+#define F(x,y,z) (z ^ (x & (y ^ z)))
+	P(A, B, C, D,  0,  7, 0xD76AA478);
+	P(D, A, B, C,  1, 12, 0xE8C7B756);
+	P(C, D, A, B,  2, 17, 0x242070DB);
+	P(B, C, D, A,  3, 22, 0xC1BDCEEE);
+	P(A, B, C, D,  4,  7, 0xF57C0FAF);
+	P(D, A, B, C,  5, 12, 0x4787C62A);
+	P(C, D, A, B,  6, 17, 0xA8304613);
+	P(B, C, D, A,  7, 22, 0xFD469501);
+	P(A, B, C, D,  8,  7, 0x698098D8);
+	P(D, A, B, C,  9, 12, 0x8B44F7AF);
+	P(C, D, A, B, 10, 17, 0xFFFF5BB1);
+	P(B, C, D, A, 11, 22, 0x895CD7BE);
+	P(A, B, C, D, 12,  7, 0x6B901122);
+	P(D, A, B, C, 13, 12, 0xFD987193);
+	P(C, D, A, B, 14, 17, 0xA679438E);
+	P(B, C, D, A, 15, 22, 0x49B40821);
+#undef F
+
+	/* second pass */
+#define F(x,y,z) (y ^ (z & (x ^ y)))
+	P(A, B, C, D,  1,  5, 0xF61E2562);
+	P(D, A, B, C,  6,  9, 0xC040B340);
+	P(C, D, A, B, 11, 14, 0x265E5A51);
+	P(B, C, D, A,  0, 20, 0xE9B6C7AA);
+	P(A, B, C, D,  5,  5, 0xD62F105D);
+	P(D, A, B, C, 10,  9, 0x02441453);
+	P(C, D, A, B, 15, 14, 0xD8A1E681);
+	P(B, C, D, A,  4, 20, 0xE7D3FBC8);
+	P(A, B, C, D,  9,  5, 0x21E1CDE6);
+	P(D, A, B, C, 14,  9, 0xC33707D6);
+	P(C, D, A, B,  3, 14, 0xF4D50D87);
+	P(B, C, D, A,  8, 20, 0x455A14ED);
+	P(A, B, C, D, 13,  5, 0xA9E3E905);
+	P(D, A, B, C,  2,  9, 0xFCEFA3F8);
+	P(C, D, A, B,  7, 14, 0x676F02D9);
+	P(B, C, D, A, 12, 20, 0x8D2A4C8A);
+#undef F
+
+	/* third pass */
+#define F(x,y,z) (x ^ y ^ z)
+	P(A, B, C, D,  5,  4, 0xFFFA3942);
+	P(D, A, B, C,  8, 11, 0x8771F681);
+	P(C, D, A, B, 11, 16, 0x6D9D6122);
+	P(B, C, D, A, 14, 23, 0xFDE5380C);
+	P(A, B, C, D,  1,  4, 0xA4BEEA44);
+	P(D, A, B, C,  4, 11, 0x4BDECFA9);
+	P(C, D, A, B,  7, 16, 0xF6BB4B60);
+	P(B, C, D, A, 10, 23, 0xBEBFBC70);
+	P(A, B, C, D, 13,  4, 0x289B7EC6);
+	P(D, A, B, C,  0, 11, 0xEAA127FA);
+	P(C, D, A, B,  3, 16, 0xD4EF3085);
+	P(B, C, D, A,  6, 23, 0x04881D05);
+	P(A, B, C, D,  9,  4, 0xD9D4D039);
+	P(D, A, B, C, 12, 11, 0xE6DB99E5);
+	P(C, D, A, B, 15, 16, 0x1FA27CF8);
+	P(B, C, D, A,  2, 23, 0xC4AC5665);
+#undef F
+
+	/* forth pass */
+#define F(x,y,z) (y ^ (x | ~z))
+	P(A, B, C, D,  0,  6, 0xF4292244);
+	P(D, A, B, C,  7, 10, 0x432AFF97);
+	P(C, D, A, B, 14, 15, 0xAB9423A7);
+	P(B, C, D, A,  5, 21, 0xFC93A039);
+	P(A, B, C, D, 12,  6, 0x655B59C3);
+	P(D, A, B, C,  3, 10, 0x8F0CCC92);
+	P(C, D, A, B, 10, 15, 0xFFEFF47D);
+	P(B, C, D, A,  1, 21, 0x85845DD1);
+	P(A, B, C, D,  8,  6, 0x6FA87E4F);
+	P(D, A, B, C, 15, 10, 0xFE2CE6E0);
+	P(C, D, A, B,  6, 15, 0xA3014314);
+	P(B, C, D, A, 13, 21, 0x4E0811A1);
+	P(A, B, C, D,  4,  6, 0xF7537E82);
+	P(D, A, B, C, 11, 10, 0xBD3AF235);
+	P(C, D, A, B,  2, 15, 0x2AD7D2BB);
+	P(B, C, D, A,  9, 21, 0xEB86D391);
+#undef F
+#undef P
+#undef S
+
+	md5_context->state[0] += A;
+	md5_context->state[1] += B;
+	md5_context->state[2] += C;
+	md5_context->state[3] += D;
+	}
+
+static void
+md5_append(PurpleCipherContext *context, const guchar *data, size_t len) {
+	struct MD5Context *md5_context = NULL;
+	guint32 left = 0, fill = 0;
+
+	g_return_if_fail(context != NULL);
+
+	md5_context = purple_cipher_context_get_data(context);
+	g_return_if_fail(md5_context != NULL);
+
+	left = md5_context->total[0] & 0x3F;
+	fill = 64 - left;
+
+	md5_context->total[0] += len;
+	md5_context->total[0] &= 0xFFFFFFFF;
+
+	if(md5_context->total[0] < len)
+		md5_context->total[1]++;
+
+	if(left && len >= fill) {
+		memcpy((md5_context->buffer + left), data, fill);
+		md5_process(md5_context, md5_context->buffer);
+		len -= fill;
+		data += fill;
+		left = 0;
+	}
+
+	while(len >= 64) {
+		md5_process(md5_context, data);
+		len -= 64;
+		data += 64;
+	}
+
+	if(len) {
+		memcpy((md5_context->buffer + left), data, len);
+	}
+}
+
+	static gboolean
+md5_digest(PurpleCipherContext *context, size_t in_len, guchar digest[16],
+		size_t *out_len)
+{
+	struct MD5Context *md5_context = NULL;
+	guint32 last, pad;
+	guint32 high, low;
+	guchar message[8];
+	guchar padding[64] = {
+		0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	};
+
+	g_return_val_if_fail(in_len >= 16, FALSE);
+
+	md5_context = purple_cipher_context_get_data(context);
+
+	high = (md5_context->total[0] >> 29)
+		| (md5_context->total[1] << 3);
+	low = (md5_context->total[0] << 3);
+
+	MD5_PUT_GUINT32(low, message, 0);
+	MD5_PUT_GUINT32(high, message, 4);
+
+	last = md5_context->total[0] & 0x3F;
+	pad = (last < 56) ? (56 - last) : (120 - last);
+
+	md5_append(context, padding, pad);
+	md5_append(context, message, 8);
+
+	MD5_PUT_GUINT32(md5_context->state[0], digest, 0);
+	MD5_PUT_GUINT32(md5_context->state[1], digest, 4);
+	MD5_PUT_GUINT32(md5_context->state[2], digest, 8);
+	MD5_PUT_GUINT32(md5_context->state[3], digest, 12);
+
+	if(out_len)
+		*out_len = 16;
+
+	return TRUE;
+}
+
+static PurpleCipherOps MD5Ops = {
+	NULL,			/* Set Option		*/
+	NULL,			/* Get Option		*/
+	md5_init,		/* init				*/
+	md5_reset,		/* reset			*/
+	md5_uninit,	/* uninit			*/
+	NULL,			/* set iv			*/
+	md5_append,	/* append			*/
+	md5_digest,		/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	md5_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+PurpleCipherOps *
+purple_md5_cipher_get_ops(void) {
+	return &MD5Ops;
+}
+
+#endif /* !GLIB_CHECK_VERSION(2,16,0) */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/rc4.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,192 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+#include <util.h>
+
+struct RC4Context {
+	guchar state[256];
+	guchar x;
+	guchar y;
+	gint key_len;
+};
+
+static void
+rc4_init(PurpleCipherContext *context, void *extra) {
+	struct RC4Context *rc4_ctx;
+	rc4_ctx = g_new0(struct RC4Context, 1);
+	purple_cipher_context_set_data(context, rc4_ctx);
+	purple_cipher_context_reset(context, extra);
+}
+
+
+static void
+rc4_reset(PurpleCipherContext *context, void *extra) {
+	struct RC4Context *rc4_ctx;
+	guint i;
+
+	rc4_ctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(rc4_ctx);
+
+	for(i = 0; i < 256; i++)
+		rc4_ctx->state[i] = i;
+	rc4_ctx->x = 0;
+	rc4_ctx->y = 0;
+
+	/* default is 5 bytes (40bit key) */
+	rc4_ctx->key_len = 5;
+
+}
+
+static void
+rc4_uninit(PurpleCipherContext *context) {
+	struct RC4Context *rc4_ctx;
+
+	rc4_ctx = purple_cipher_context_get_data(context);
+	memset(rc4_ctx, 0, sizeof(*rc4_ctx));
+
+	g_free(rc4_ctx);
+	rc4_ctx = NULL;
+}
+
+
+
+static void
+rc4_set_key (PurpleCipherContext *context, const guchar * key) {
+	struct RC4Context *ctx;
+	guchar *state;
+	guchar temp_swap;
+	guchar x, y;
+	guint i;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	x = 0;
+	y = 0;
+	state = &ctx->state[0];
+	for(i = 0; i < 256; i++)
+	{
+		y = (key[x] + state[i] + y) % 256;
+		temp_swap = state[i];
+		state[i] = state[y];
+		state[y] = temp_swap;
+		x = (x + 1) % ctx->key_len;
+	}
+}
+
+static void
+rc4_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
+	struct RC4Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(purple_strequal(name, "key_len")) {
+		ctx->key_len = GPOINTER_TO_INT(value);
+	}
+}
+
+static size_t
+rc4_get_key_size (PurpleCipherContext *context)
+{
+	struct RC4Context *ctx;
+
+	g_return_val_if_fail(context, -1);
+
+	ctx = purple_cipher_context_get_data(context);
+
+	g_return_val_if_fail(ctx, -1);
+
+	return ctx->key_len;
+}
+
+static void *
+rc4_get_opt(PurpleCipherContext *context, const gchar *name) {
+	struct RC4Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(purple_strequal(name, "key_len")) {
+		return GINT_TO_POINTER(ctx->key_len);
+	}
+
+	return NULL;
+}
+
+static gint
+rc4_encrypt(PurpleCipherContext *context, const guchar data[],
+            size_t len, guchar output[], size_t *outlen) {
+	struct RC4Context *ctx;
+	guchar temp_swap;
+	guchar x, y, z;
+	guchar *state;
+	guint i;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	x = ctx->x;
+	y = ctx->y;
+	state = &ctx->state[0];
+
+	for(i = 0; i < len; i++)
+	{
+		x = (x + 1) % 256;
+		y = (state[x] + y) % 256;
+		temp_swap = state[x];
+		state[x] = state[y];
+		state[y] = temp_swap;
+		z = state[x] + (state[y]) % 256;
+		output[i] = data[i] ^ state[z];
+	}
+	ctx->x = x;
+	ctx->y = y;
+	if(outlen)
+		*outlen = len;
+
+	return 0;
+}
+
+static PurpleCipherOps RC4Ops = {
+	rc4_set_opt,   /* Set Option    */
+	rc4_get_opt,   /* Get Option    */
+	rc4_init,      /* init          */
+	rc4_reset,     /* reset         */
+	rc4_uninit,    /* uninit        */
+	NULL,          /* set iv        */
+	NULL,          /* append        */
+	NULL,          /* digest        */
+	rc4_encrypt,   /* encrypt       */
+	NULL,          /* decrypt       */
+	NULL,          /* set salt      */
+	NULL,          /* get salt size */
+	rc4_set_key,   /* set key       */
+	rc4_get_key_size, /* get key size  */
+	NULL,          /* set batch mode */
+	NULL,          /* get batch mode */
+	NULL,          /* get block size */
+	NULL           /* set key with len */
+};
+
+PurpleCipherOps *
+purple_rc4_cipher_get_ops(void) {
+	return &RC4Ops;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/sha1.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,281 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+#include <util.h>
+
+#if !GLIB_CHECK_VERSION(2,16,0)
+
+#define SHA1_HMAC_BLOCK_SIZE    64
+#define SHA1_ROTL(X,n) ((((X) << (n)) | ((X) >> (32-(n)))) & 0xFFFFFFFF)
+
+struct SHA1Context {
+	guint32 H[5];
+	guint32 W[80];
+
+	gint lenW;
+
+	guint32 sizeHi;
+	guint32 sizeLo;
+};
+
+static size_t
+sha1_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return SHA1_HMAC_BLOCK_SIZE;
+}
+
+static void
+sha1_hash_block(struct SHA1Context *sha1_ctx) {
+	gint i;
+	guint32 A, B, C, D, E, T;
+
+	for(i = 16; i < 80; i++) {
+		sha1_ctx->W[i] = SHA1_ROTL(sha1_ctx->W[i -  3] ^
+				sha1_ctx->W[i -  8] ^
+				sha1_ctx->W[i - 14] ^
+				sha1_ctx->W[i - 16], 1);
+	}
+
+	A = sha1_ctx->H[0];
+	B = sha1_ctx->H[1];
+	C = sha1_ctx->H[2];
+	D = sha1_ctx->H[3];
+	E = sha1_ctx->H[4];
+
+	for(i = 0; i < 20; i++) {
+		T = (SHA1_ROTL(A, 5) + (((C ^ D) & B) ^ D) + E + sha1_ctx->W[i] + 0x5A827999) & 0xFFFFFFFF;
+		E = D;
+		D = C;
+		C = SHA1_ROTL(B, 30);
+		B = A;
+		A = T;
+	}
+
+	for(i = 20; i < 40; i++) {
+		T = (SHA1_ROTL(A, 5) + (B ^ C ^ D) + E + sha1_ctx->W[i] + 0x6ED9EBA1) & 0xFFFFFFFF;
+		E = D;
+		D = C;
+		C = SHA1_ROTL(B, 30);
+		B = A;
+		A = T;
+	}
+
+	for(i = 40; i < 60; i++) {
+		T = (SHA1_ROTL(A, 5) + ((B & C) | (D & (B | C))) + E + sha1_ctx->W[i] + 0x8F1BBCDC) & 0xFFFFFFFF;
+		E = D;
+		D = C;
+		C = SHA1_ROTL(B, 30);
+		B = A;
+		A = T;
+	}
+
+	for(i = 60; i < 80; i++) {
+		T = (SHA1_ROTL(A, 5) + (B ^ C ^ D) + E + sha1_ctx->W[i] + 0xCA62C1D6) & 0xFFFFFFFF;
+		E = D;
+		D = C;
+		C = SHA1_ROTL(B, 30);
+		B = A;
+		A = T;
+	}
+
+	sha1_ctx->H[0] += A;
+	sha1_ctx->H[1] += B;
+	sha1_ctx->H[2] += C;
+	sha1_ctx->H[3] += D;
+	sha1_ctx->H[4] += E;
+}
+
+static void
+sha1_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
+	struct SHA1Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(purple_strequal(name, "sizeHi")) {
+		ctx->sizeHi = GPOINTER_TO_INT(value);
+	} else if(purple_strequal(name, "sizeLo")) {
+		ctx->sizeLo = GPOINTER_TO_INT(value);
+	} else if(purple_strequal(name, "lenW")) {
+		ctx->lenW = GPOINTER_TO_INT(value);
+	}
+}
+
+static void *
+sha1_get_opt(PurpleCipherContext *context, const gchar *name) {
+	struct SHA1Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(purple_strequal(name, "sizeHi")) {
+		return GINT_TO_POINTER(ctx->sizeHi);
+	} else if(purple_strequal(name, "sizeLo")) {
+		return GINT_TO_POINTER(ctx->sizeLo);
+	} else if(purple_strequal(name, "lenW")) {
+		return GINT_TO_POINTER(ctx->lenW);
+	}
+
+	return NULL;
+}
+
+static void
+sha1_init(PurpleCipherContext *context, void *extra) {
+	struct SHA1Context *sha1_ctx;
+
+	sha1_ctx = g_new0(struct SHA1Context, 1);
+
+	purple_cipher_context_set_data(context, sha1_ctx);
+
+	purple_cipher_context_reset(context, extra);
+}
+
+static void
+sha1_reset(PurpleCipherContext *context, void *extra) {
+	struct SHA1Context *sha1_ctx;
+	gint i;
+
+	sha1_ctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(sha1_ctx);
+
+	sha1_ctx->lenW = 0;
+	sha1_ctx->sizeHi = 0;
+	sha1_ctx->sizeLo = 0;
+
+	sha1_ctx->H[0] = 0x67452301;
+	sha1_ctx->H[1] = 0xEFCDAB89;
+	sha1_ctx->H[2] = 0x98BADCFE;
+	sha1_ctx->H[3] = 0x10325476;
+	sha1_ctx->H[4] = 0xC3D2E1F0;
+
+	for(i = 0; i < 80; i++)
+		sha1_ctx->W[i] = 0;
+}
+
+static void
+sha1_uninit(PurpleCipherContext *context) {
+	struct SHA1Context *sha1_ctx;
+
+	purple_cipher_context_reset(context, NULL);
+
+	sha1_ctx = purple_cipher_context_get_data(context);
+
+	memset(sha1_ctx, 0, sizeof(struct SHA1Context));
+
+	g_free(sha1_ctx);
+	sha1_ctx = NULL;
+}
+
+static void
+sha1_append(PurpleCipherContext *context, const guchar *data, size_t len) {
+	struct SHA1Context *sha1_ctx;
+	gint i;
+
+	sha1_ctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(sha1_ctx);
+
+	for(i = 0; i < len; i++) {
+		sha1_ctx->W[sha1_ctx->lenW / 4] <<= 8;
+		sha1_ctx->W[sha1_ctx->lenW / 4] |= data[i];
+
+		if((++sha1_ctx->lenW) % 64 == 0) {
+			sha1_hash_block(sha1_ctx);
+			sha1_ctx->lenW = 0;
+		}
+
+		sha1_ctx->sizeLo += 8;
+		sha1_ctx->sizeHi += (sha1_ctx->sizeLo < 8);
+	}
+}
+
+static gboolean
+sha1_digest(PurpleCipherContext *context, size_t in_len, guchar digest[20],
+            size_t *out_len)
+{
+	struct SHA1Context *sha1_ctx;
+	guchar pad0x80 = 0x80, pad0x00 = 0x00;
+	guchar padlen[8];
+	gint i;
+
+	g_return_val_if_fail(in_len >= 20, FALSE);
+
+	sha1_ctx = purple_cipher_context_get_data(context);
+
+	g_return_val_if_fail(sha1_ctx, FALSE);
+
+	padlen[0] = (guchar)((sha1_ctx->sizeHi >> 24) & 255);
+	padlen[1] = (guchar)((sha1_ctx->sizeHi >> 16) & 255);
+	padlen[2] = (guchar)((sha1_ctx->sizeHi >> 8) & 255);
+	padlen[3] = (guchar)((sha1_ctx->sizeHi >> 0) & 255);
+	padlen[4] = (guchar)((sha1_ctx->sizeLo >> 24) & 255);
+	padlen[5] = (guchar)((sha1_ctx->sizeLo >> 16) & 255);
+	padlen[6] = (guchar)((sha1_ctx->sizeLo >> 8) & 255);
+	padlen[7] = (guchar)((sha1_ctx->sizeLo >> 0) & 255);
+
+	/* pad with a 1, then zeroes, then length */
+	purple_cipher_context_append(context, &pad0x80, 1);
+	while(sha1_ctx->lenW != 56)
+		purple_cipher_context_append(context, &pad0x00, 1);
+	purple_cipher_context_append(context, padlen, 8);
+
+	for(i = 0; i < 20; i++) {
+		digest[i] = (guchar)(sha1_ctx->H[i / 4] >> 24);
+		sha1_ctx->H[i / 4] <<= 8;
+	}
+
+	purple_cipher_context_reset(context, NULL);
+
+	if(out_len)
+		*out_len = 20;
+
+	return TRUE;
+}
+
+static PurpleCipherOps SHA1Ops = {
+	sha1_set_opt,		/* Set Option		*/
+	sha1_get_opt,		/* Get Option		*/
+	sha1_init,		/* init				*/
+	sha1_reset,		/* reset			*/
+	sha1_uninit,		/* uninit			*/
+	NULL,			/* set iv			*/
+	sha1_append,		/* append			*/
+	sha1_digest,	/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	sha1_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+PurpleCipherOps *
+purple_sha1_cipher_get_ops(void) {
+	return &SHA1Ops;
+}
+
+#endif /* !GLIB_CHECK_VERSION(2,16,0) */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/ciphers/sha256.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,283 @@
+/*
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#include <cipher.h>
+
+#if !GLIB_CHECK_VERSION(2,16,0)
+
+#define SHA256_HMAC_BLOCK_SIZE  64
+#define SHA256_ROTR(X,n) ((((X) >> (n)) | ((X) << (32-(n)))) & 0xFFFFFFFF)
+
+static const guint32 sha256_K[64] =
+{
+	0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+	0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+	0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+	0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+	0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+	0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+	0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+	0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+};
+
+struct SHA256Context {
+	guint32 H[8];
+	guint32 W[64];
+
+	gint lenW;
+
+	guint32 sizeHi;
+	guint32 sizeLo;
+};
+
+static size_t
+sha256_get_block_size(PurpleCipherContext *context)
+{
+	/* This does not change (in this case) */
+	return SHA256_HMAC_BLOCK_SIZE;
+}
+
+static void
+sha256_hash_block(struct SHA256Context *sha256_ctx) {
+	gint i;
+	guint32 A, B, C, D, E, F, G, H, T1, T2;
+
+	for(i = 16; i < 64; i++) {
+		sha256_ctx->W[i] =
+			  (SHA256_ROTR(sha256_ctx->W[i-2], 17) ^ SHA256_ROTR(sha256_ctx->W[i-2],  19) ^ (sha256_ctx->W[i-2] >> 10))
+			+ sha256_ctx->W[i-7]
+			+ (SHA256_ROTR(sha256_ctx->W[i-15], 7) ^ SHA256_ROTR(sha256_ctx->W[i-15], 18) ^ (sha256_ctx->W[i-15] >> 3))
+			+ sha256_ctx->W[i-16];
+	}
+
+	A = sha256_ctx->H[0];
+	B = sha256_ctx->H[1];
+	C = sha256_ctx->H[2];
+	D = sha256_ctx->H[3];
+	E = sha256_ctx->H[4];
+	F = sha256_ctx->H[5];
+	G = sha256_ctx->H[6];
+	H = sha256_ctx->H[7];
+
+	for(i = 0; i < 64; i++) {
+		T1 = H
+			+ (SHA256_ROTR(E, 6) ^ SHA256_ROTR(E, 11) ^ SHA256_ROTR(E, 25))
+			+ ((E & F) ^ ((~E) & G))
+			+ sha256_K[i] + sha256_ctx->W[i];
+		T2 = (SHA256_ROTR(A, 2) ^ SHA256_ROTR(A, 13) ^ SHA256_ROTR(A, 22))
+			+ ((A & B) ^ (A & C) ^ (B & C));
+		H = G;
+		G = F;
+		F = E;
+		E = D + T1;
+		D = C;
+		C = B;
+		B = A;
+		A = T1 + T2;
+	}
+
+	sha256_ctx->H[0] += A;
+	sha256_ctx->H[1] += B;
+	sha256_ctx->H[2] += C;
+	sha256_ctx->H[3] += D;
+	sha256_ctx->H[4] += E;
+	sha256_ctx->H[5] += F;
+	sha256_ctx->H[6] += G;
+	sha256_ctx->H[7] += H;
+}
+
+static void
+sha256_set_opt(PurpleCipherContext *context, const gchar *name, void *value) {
+	struct SHA256Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(!strcmp(name, "sizeHi")) {
+		ctx->sizeHi = GPOINTER_TO_INT(value);
+	} else if(!strcmp(name, "sizeLo")) {
+		ctx->sizeLo = GPOINTER_TO_INT(value);
+	} else if(!strcmp(name, "lenW")) {
+		ctx->lenW = GPOINTER_TO_INT(value);
+	}
+}
+
+static void *
+sha256_get_opt(PurpleCipherContext *context, const gchar *name) {
+	struct SHA256Context *ctx;
+
+	ctx = purple_cipher_context_get_data(context);
+
+	if(!strcmp(name, "sizeHi")) {
+		return GINT_TO_POINTER(ctx->sizeHi);
+	} else if(!strcmp(name, "sizeLo")) {
+		return GINT_TO_POINTER(ctx->sizeLo);
+	} else if(!strcmp(name, "lenW")) {
+		return GINT_TO_POINTER(ctx->lenW);
+	}
+
+	return NULL;
+}
+
+static void
+sha256_init(PurpleCipherContext *context, void *extra) {
+	struct SHA256Context *sha256_ctx;
+
+	sha256_ctx = g_new0(struct SHA256Context, 1);
+
+	purple_cipher_context_set_data(context, sha256_ctx);
+
+	purple_cipher_context_reset(context, extra);
+}
+
+static void
+sha256_reset(PurpleCipherContext *context, void *extra) {
+	struct SHA256Context *sha256_ctx;
+	gint i;
+
+	sha256_ctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(sha256_ctx);
+
+	sha256_ctx->lenW = 0;
+	sha256_ctx->sizeHi = 0;
+	sha256_ctx->sizeLo = 0;
+
+	sha256_ctx->H[0] = 0x6a09e667;
+	sha256_ctx->H[1] = 0xbb67ae85;
+	sha256_ctx->H[2] = 0x3c6ef372;
+	sha256_ctx->H[3] = 0xa54ff53a;
+	sha256_ctx->H[4] = 0x510e527f;
+	sha256_ctx->H[5] = 0x9b05688c;
+	sha256_ctx->H[6] = 0x1f83d9ab;
+	sha256_ctx->H[7] = 0x5be0cd19;
+
+	for(i = 0; i < 64; i++)
+		sha256_ctx->W[i] = 0;
+}
+
+static void
+sha256_uninit(PurpleCipherContext *context) {
+	struct SHA256Context *sha256_ctx;
+
+	purple_cipher_context_reset(context, NULL);
+
+	sha256_ctx = purple_cipher_context_get_data(context);
+
+	memset(sha256_ctx, 0, sizeof(struct SHA256Context));
+
+	g_free(sha256_ctx);
+	sha256_ctx = NULL;
+}
+
+static void
+sha256_append(PurpleCipherContext *context, const guchar *data, size_t len) {
+	struct SHA256Context *sha256_ctx;
+	gint i;
+
+	sha256_ctx = purple_cipher_context_get_data(context);
+
+	g_return_if_fail(sha256_ctx);
+
+	for(i = 0; i < len; i++) {
+		sha256_ctx->W[sha256_ctx->lenW / 4] <<= 8;
+		sha256_ctx->W[sha256_ctx->lenW / 4] |= data[i];
+
+		if((++sha256_ctx->lenW) % 64 == 0) {
+			sha256_hash_block(sha256_ctx);
+			sha256_ctx->lenW = 0;
+		}
+
+		sha256_ctx->sizeLo += 8;
+		sha256_ctx->sizeHi += (sha256_ctx->sizeLo < 8);
+	}
+}
+
+static gboolean
+sha256_digest(PurpleCipherContext *context, size_t in_len, guchar digest[32],
+              size_t *out_len)
+{
+	struct SHA256Context *sha256_ctx;
+	guchar pad0x80 = 0x80, pad0x00 = 0x00;
+	guchar padlen[8];
+	gint i;
+
+	g_return_val_if_fail(in_len >= 32, FALSE);
+
+	sha256_ctx = purple_cipher_context_get_data(context);
+
+	g_return_val_if_fail(sha256_ctx, FALSE);
+
+	padlen[0] = (guchar)((sha256_ctx->sizeHi >> 24) & 255);
+	padlen[1] = (guchar)((sha256_ctx->sizeHi >> 16) & 255);
+	padlen[2] = (guchar)((sha256_ctx->sizeHi >> 8) & 255);
+	padlen[3] = (guchar)((sha256_ctx->sizeHi >> 0) & 255);
+	padlen[4] = (guchar)((sha256_ctx->sizeLo >> 24) & 255);
+	padlen[5] = (guchar)((sha256_ctx->sizeLo >> 16) & 255);
+	padlen[6] = (guchar)((sha256_ctx->sizeLo >> 8) & 255);
+	padlen[7] = (guchar)((sha256_ctx->sizeLo >> 0) & 255);
+
+	/* pad with a 1, then zeroes, then length */
+	purple_cipher_context_append(context, &pad0x80, 1);
+	while(sha256_ctx->lenW != 56)
+		purple_cipher_context_append(context, &pad0x00, 1);
+	purple_cipher_context_append(context, padlen, 8);
+
+	for(i = 0; i < 32; i++) {
+		digest[i] = (guchar)(sha256_ctx->H[i / 4] >> 24);
+		sha256_ctx->H[i / 4] <<= 8;
+	}
+
+	purple_cipher_context_reset(context, NULL);
+
+	if(out_len)
+		*out_len = 32;
+
+	return TRUE;
+}
+
+static PurpleCipherOps SHA256Ops = {
+	sha256_set_opt,			/* Set Option		*/
+	sha256_get_opt,			/* Get Option		*/
+	sha256_init,	/* init				*/
+	sha256_reset,	/* reset			*/
+	sha256_uninit,	/* uninit			*/
+	NULL,			/* set iv			*/
+	sha256_append,	/* append			*/
+	sha256_digest,	/* digest			*/
+	NULL,			/* encrypt			*/
+	NULL,			/* decrypt			*/
+	NULL,			/* set salt			*/
+	NULL,			/* get salt size	*/
+	NULL,			/* set key			*/
+	NULL,			/* get key size		*/
+	NULL,			/* set batch mode */
+	NULL,			/* get batch mode */
+	sha256_get_block_size,	/* get block size */
+	NULL			/* set key with len */
+};
+
+PurpleCipherOps *
+purple_sha256_cipher_get_ops(void) {
+	return &SHA256Ops;
+}
+
+#endif /* !GLIB_CHECK_VERSION(2,16,0) */
+
--- a/libpurple/conversation.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/conversation.c	Sun Mar 13 18:14:04 2011 +0000
@@ -999,12 +999,6 @@
 		}
 	}
 
-	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
-		if ((flags & PURPLE_MESSAGE_RECV) == PURPLE_MESSAGE_RECV) {
-			purple_conv_im_set_typing_state(PURPLE_CONV_IM(conv), PURPLE_NOT_TYPING);
-		}
-	}
-
 	if (ops && ops->write_conv)
 		ops->write_conv(conv, who, alias, displayed, flags, mtime);
 
@@ -1224,6 +1218,10 @@
 
 	c = purple_conv_im_get_conversation(im);
 
+    if ((flags & PURPLE_MESSAGE_RECV) == PURPLE_MESSAGE_RECV) {
+		purple_conv_im_set_typing_state(im, PURPLE_NOT_TYPING);
+	}
+
 	/* Pass this on to either the ops structure or the default write func. */
 	if (c->ui_ops != NULL && c->ui_ops->write_im != NULL)
 		c->ui_ops->write_im(c, who, message, flags, mtime);
--- a/libpurple/ft.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/ft.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1100,9 +1100,11 @@
 		r = write(xfer->fd, buffer, s);
 		if (r < 0 && errno == EAGAIN)
 			r = 0;
-		if ((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer))
-			purple_xfer_set_completed(xfer, TRUE);
 	}
+	if (r >= 0 && (purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer) &&
+		!purple_xfer_is_completed(xfer))
+		purple_xfer_set_completed(xfer, TRUE);
+	
 
 	return r;
 }
--- a/libpurple/media/backend-fs2.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/media/backend-fs2.c	Sun Mar 13 18:14:04 2011 +0000
@@ -125,6 +125,7 @@
 
 	GstElement *src;
 	GstElement *tee;
+	GstElement *srcvalve;
 
 	GstPad *srcpad;
 
@@ -142,6 +143,8 @@
 	GHashTable *participants;
 
 	GList *streams;
+
+	gdouble silence_threshold;
 };
 
 enum {
@@ -153,6 +156,11 @@
 static void
 purple_media_backend_fs2_init(PurpleMediaBackendFs2 *self)
 {
+	PurpleMediaBackendFs2Private *priv =
+			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+
+	priv->silence_threshold = purple_prefs_get_int(
+			"/purple/media/audio/silence_threshold") / 100.0;
 }
 
 static gboolean
@@ -766,6 +774,22 @@
 	return NULL;
 }
 
+static gdouble
+gst_msg_db_to_percent(GstMessage *msg, gchar *value_name)
+{
+	const GValue *list;
+	const GValue *value;
+	gdouble value_db;
+	gdouble percent;
+
+	list = gst_structure_get_value(
+				gst_message_get_structure(msg), value_name);
+	value = gst_value_list_get_value(list, 0);
+	value_db = g_value_get_double(value);
+	percent = pow(10, value_db / 20);
+	return (percent > 1.0) ? 1.0 : percent;
+}
+
 static void
 gst_handle_message_element(GstBus *bus, GstMessage *msg,
 		PurpleMediaBackendFs2 *self)
@@ -778,17 +802,12 @@
 	if (level_id == 0)
 		level_id = g_signal_lookup("level", PURPLE_TYPE_MEDIA);
 
-	if (g_signal_has_handler_pending(priv->media, level_id, 0, FALSE)
-			&& gst_structure_has_name(
-			gst_message_get_structure(msg), "level")) {
+	if (gst_structure_has_name(msg->structure, "level")) {
 		GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
 		gchar *name;
 		gchar *participant = NULL;
 		PurpleMediaBackendFs2Session *session = NULL;
-		gdouble rms_db;
 		gdouble percent;
-		const GValue *list;
-		const GValue *value;
 
 		if (!PURPLE_IS_MEDIA(priv->media) ||
 				GST_ELEMENT_PARENT(src) != priv->confbin)
@@ -798,7 +817,17 @@
 
 		if (!strncmp(name, "sendlevel_", 10)) {
 			session = get_session(self, name+10);
-		} else {
+			percent = gst_msg_db_to_percent(msg, "decay");
+			g_object_set(session->srcvalve,
+					"drop", (percent < priv->silence_threshold), NULL);
+		}
+
+		g_free(name);
+
+		if (!g_signal_has_handler_pending(priv->media, level_id, 0, FALSE))
+			return;
+
+		if (!session) {
 			GList *iter = priv->streams;
 			PurpleMediaBackendFs2Stream *stream;
 			for (; iter; iter = g_list_next(iter)) {
@@ -811,19 +840,10 @@
 			}
 		}
 
-		g_free(name);
-
 		if (!session)
 			return;
 
-		list = gst_structure_get_value(
-				gst_message_get_structure(msg), "rms");
-		value = gst_value_list_get_value(list, 0);
-		rms_db = g_value_get_double(value);
-		percent = pow(10, rms_db / 20) * 5;
-
-		if(percent > 1.0)
-			percent = 1.0;
+		percent = gst_msg_db_to_percent(msg, "rms");
 
 		g_signal_emit(priv->media, level_id, 0,
 				session->id, participant, percent);
@@ -1376,13 +1396,17 @@
 		name = g_strdup_printf("sendlevel_%s", session->id);
 		level = gst_element_factory_make("level", name);
 		g_free(name);
+		session->srcvalve = gst_element_factory_make("valve", NULL);
 		gst_bin_add(GST_BIN(priv->confbin), volume);
 		gst_bin_add(GST_BIN(priv->confbin), level);
+		gst_bin_add(GST_BIN(priv->confbin), session->srcvalve);
 		gst_element_set_state(level, GST_STATE_PLAYING);
 		gst_element_set_state(volume, GST_STATE_PLAYING);
+		gst_element_set_state(session->srcvalve, GST_STATE_PLAYING);
+		gst_element_link(level, session->srcvalve);
 		gst_element_link(volume, level);
 		gst_element_link(session->tee, volume);
-		srcpad = gst_element_get_static_pad(level, "src");
+		srcpad = gst_element_get_static_pad(session->srcvalve, "src");
 		g_object_set(volume, "volume", input_volume, NULL);
 	} else {
 		srcpad = gst_element_get_request_pad(session->tee, "src%d");
--- a/libpurple/mediamanager.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/mediamanager.c	Sun Mar 13 18:14:04 2011 +0000
@@ -175,6 +175,7 @@
 
 	purple_prefs_add_none("/purple/media");
 	purple_prefs_add_none("/purple/media/audio");
+	purple_prefs_add_int("/purple/media/audio/silence_threshold", 5);
 	purple_prefs_add_none("/purple/media/audio/volume");
 	purple_prefs_add_int("/purple/media/audio/volume/input", 10);
 	purple_prefs_add_int("/purple/media/audio/volume/output", 10);
--- a/libpurple/plugins/perl/common/Conversation.xs	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/plugins/perl/common/Conversation.xs	Sun Mar 13 18:14:04 2011 +0000
@@ -118,6 +118,12 @@
 		XPUSHs(sv_2mortal(purple_perl_bless_object(l->data, "Purple::Conversation")));
 	}
 
+Purple::Conversation
+purple_find_conversation_with_account(type, name, account)
+	Purple::ConversationType type
+	const char *name
+	Purple::Account account
+
 MODULE = Purple::Conversation  PACKAGE = Purple::Conversations  PREFIX = purple_conversations_
 PROTOTYPES: ENABLE
 
@@ -297,6 +303,12 @@
 	const char *message
 
 void
+purple_conv_im_send_with_flags(im, message, flags)
+	Purple::Conversation::IM im
+	const char *message
+	Purple::MessageFlags flags
+
+void
 purple_conv_im_write(im, who, message, flags, mtime)
 	Purple::Conversation::IM im
 	const char *who
@@ -410,6 +422,12 @@
 	const char * message
 
 void
+purple_conv_chat_send_with_flags(chat, message, flags)
+	Purple::Conversation::Chat chat
+	const char * message
+	Purple::MessageFlags flags
+
+void
 purple_conv_chat_write(chat, who, message, flags, mtime)
 	Purple::Conversation::Chat chat
 	const char *who
--- a/libpurple/protocols/gg/gg.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/gg/gg.c	Sun Mar 13 18:14:04 2011 +0000
@@ -49,6 +49,10 @@
 
 static PurplePlugin *my_protocol = NULL;
 
+/* Prototypes */
+static void ggp_set_status(PurpleAccount *account, PurpleStatus *status);
+static int ggp_to_gg_status(PurpleStatus *status, char **msg);
+
 /* ---------------------------------------------------------------------- */
 /* ----- EXTERNAL CALLBACKS --------------------------------------------- */
 /* ---------------------------------------------------------------------- */
@@ -755,6 +759,61 @@
 	ggp_token_request(gc, ggp_change_passwd_dialog);
 }
 
+/* ----- CHANGE STATUS BROADCASTING ------------------------------------------------ */
+
+static void ggp_action_change_status_broadcasting_ok(PurpleConnection *gc, PurpleRequestFields *fields)
+{
+	GGPInfo *info = gc->proto_data;
+	int selected_field;
+	PurpleAccount *account = purple_connection_get_account(gc);
+	PurpleStatus *status;
+
+	selected_field = purple_request_fields_get_choice(fields, "status_broadcasting");
+	
+	if (selected_field == 0)
+		info->status_broadcasting = TRUE;
+	else
+		info->status_broadcasting = FALSE;
+	
+	status = purple_account_get_active_status(account);
+	
+	ggp_set_status(account, status);
+}
+
+static void ggp_action_change_status_broadcasting(PurplePluginAction *action)
+{
+	PurpleConnection *gc = (PurpleConnection *)action->context;
+	GGPInfo *info = gc->proto_data;
+	
+	PurpleRequestFields *fields;
+	PurpleRequestFieldGroup *group;
+	PurpleRequestField *field;
+
+	fields = purple_request_fields_new();
+	group = purple_request_field_group_new(NULL);
+	purple_request_fields_add_group(fields, group);
+	
+	field = purple_request_field_choice_new("status_broadcasting", _("Show status to:"), 0);
+	purple_request_field_choice_add(field, _("All people"));
+	purple_request_field_choice_add(field, _("Only buddies"));
+	purple_request_field_group_add_field(group, field);
+
+	if (info->status_broadcasting)
+		purple_request_field_choice_set_default_value(field, 0);
+	else
+		purple_request_field_choice_set_default_value(field, 1);
+
+	purple_request_fields(gc,
+		_("Change status broadcasting"),
+		_("Change status broadcasting"),
+		_("Please, select who can see your status"),
+		fields,
+		_("OK"), G_CALLBACK(ggp_action_change_status_broadcasting_ok),
+		_("Cancel"), NULL,
+		purple_connection_get_account(gc), NULL, NULL,
+		gc);
+}
+
 /* ----- CONFERENCES ---------------------------------------------------- */
 
 static void ggp_callback_add_to_chat_ok(PurpleBuddy *buddy, PurpleRequestFields *fields)
@@ -856,10 +915,6 @@
 /* ----- INTERNAL CALLBACKS --------------------------------------------- */
 /* ---------------------------------------------------------------------- */
 
-/* Prototypes */
-static void ggp_set_status(PurpleAccount *account, PurpleStatus *status);
-static int ggp_to_gg_status(PurpleStatus *status, char **msg);
-
 struct gg_fetch_avatar_data
 {
 	PurpleConnection *gc;
@@ -1948,7 +2003,8 @@
 	info->searches = ggp_search_new();
 	info->pending_richtext_messages = NULL;
 	info->pending_images = g_hash_table_new(g_int_hash, g_int_equal);
-
+	info->status_broadcasting = purple_account_get_bool(account, "status_broadcasting", TRUE);
+	
 	gc->proto_data = info;
 
 	glp->uin = ggp_get_uin(account);
@@ -1965,6 +2021,9 @@
 	glp->status = ggp_to_gg_status(status, &glp->status_descr);
 	glp->tls = 0;
 
+	if (!info->status_broadcasting)
+		glp->status = glp->status|GG_STATUS_FRIENDS_MASK;
+	
 	address = purple_account_get_string(account, "gg_server", "");
 	if (address && *address) {
 		/* TODO: Make this non-blocking */
@@ -2021,6 +2080,8 @@
 			gg_free_session(info->session);
 		}
 
+		purple_account_set_bool(account, "status_broadcasting", info->status_broadcasting);
+
 		/* Immediately close any notifications on this handle since that process depends
 		 * upon the contents of info->searches, which we are about to destroy.
 		 */
@@ -2243,6 +2304,9 @@
 
 	new_status = ggp_to_gg_status(status, &new_msg);
 
+	if (!info->status_broadcasting)
+		new_status = new_status|GG_STATUS_FRIENDS_MASK;
+	
 	if (new_msg == NULL) {
 		gg_change_status(info->session, new_status);
 	} else {
@@ -2431,6 +2495,10 @@
 				     ggp_action_buddylist_load);
 	m = g_list_append(m, act);
 
+	act = purple_plugin_action_new(_("Change status broadcasting"),
+				     ggp_action_change_status_broadcasting);
+	m = g_list_append(m, act);
+	
 	return m;
 }
 
--- a/libpurple/protocols/gg/gg.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/gg/gg.h	Sun Mar 13 18:14:04 2011 +0000
@@ -64,6 +64,7 @@
 	int chats_count;
 	GList *pending_richtext_messages;
 	GHashTable *pending_images;
+	gboolean status_broadcasting; //When TRUE status is visible to all, when FALSE status is visible only to friends.
 } GGPInfo;
 
 #endif /* _PURPLE_GG_H */
--- a/libpurple/protocols/gg/lib/libgadu.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/gg/lib/libgadu.h	Sun Mar 13 18:14:04 2011 +0000
@@ -117,7 +117,7 @@
 typedef unsigned short uint16_t;
 typedef unsigned int   uint32_t;
 
-#if !defined(__CYGWIN__) && !defined(__SunOS)
+#if !defined(__CYGWIN__) && !defined(__SunOS) && !defined(_INCLUDE_HPUX_SOURCE)
 #define __int8_t_defined
 typedef   signed char    int8_t;
 typedef   signed short  int16_t;
--- a/libpurple/protocols/jabber/Makefile.am	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -11,6 +11,7 @@
 			  auth.c \
 			  auth.h \
 			  auth_digest_md5.c \
+			  auth_digest_md5.h \
 			  auth_plain.c \
 			  auth_scram.c \
 			  auth_scram.h \
--- a/libpurple/protocols/jabber/auth_digest_md5.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/auth_digest_md5.c	Sun Mar 13 18:14:04 2011 +0000
@@ -27,6 +27,7 @@
 #include "util.h"
 #include "xmlnode.h"
 
+#include "auth_digest_md5.h"
 #include "auth.h"
 #include "jabber.h"
 
@@ -43,7 +44,7 @@
 }
 
 /* Parts of this algorithm are inspired by stuff in libgsasl */
-static GHashTable* parse_challenge(const char *challenge)
+GHashTable* jabber_auth_digest_md5_parse(const char *challenge)
 {
 	const char *token_start, *val_start, *val_end, *cur;
 	GHashTable *ret = g_hash_table_new_full(g_str_hash, g_str_equal,
@@ -77,12 +78,12 @@
 					val_start++;
 
 				val_end = cur;
-				while (val_end != val_start && (*val_end == ' ' || *val_end == ',' || *val_end == '\t'
+				while (val_end >= val_start && (*val_end == ' ' || *val_end == ',' || *val_end == '\t'
 						|| *val_end == '\r' || *val_end == '\n'
 						|| *val_end == '"'  || *val_end == '\0'))
 					val_end--;
 
-				if (val_start != val_end)
+				if (val_end - val_start + 1 >= 0)
 					value = g_strndup(val_start, val_end - val_start + 1);
 			}
 
@@ -186,7 +187,7 @@
 			dec_in != NULL ? strlen(dec_in) : 0,
 			dec_in != NULL  ? dec_in : "(null)");
 
-	parts = parse_challenge(dec_in);
+	parts = jabber_auth_digest_md5_parse(dec_in);
 
 	if (g_hash_table_lookup(parts, "rspauth")) {
 		char *rspauth = g_hash_table_lookup(parts, "rspauth");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/jabber/auth_digest_md5.h	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,39 @@
+/**
+ * @file auth_digest_md5.h Implementation of SASL DIGEST-MD5 authentication
+ *
+ * purple
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+#ifndef PURPLE_JABBER_AUTH_DIGEST_MD5_H_
+#define PURPLE_JABBER_AUTH_DIGEST_MD5_H_
+
+#include "internal.h"
+
+/*
+ * Every function in this file is ONLY exposed for tests.
+ * DO NOT USE ANYTHING HERE OR YOU WILL BE SENT TO THE PIT OF DESPAIR.
+ */
+
+/*
+ * Parse a DIGEST-MD5 challenge.
+ */
+GHashTable *jabber_auth_digest_md5_parse(const char *challenge);
+
+#endif /* PURPLE_JABBER_AUTH_DIGEST_MD5_H_ */
--- a/libpurple/protocols/jabber/auth_scram.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/auth_scram.c	Sun Mar 13 18:14:04 2011 +0000
@@ -375,7 +375,7 @@
 	gchar *tmp, *tmp2;
 
 	tmp = purple_strreplace(in, "=", "=3D");
-	tmp2 = purple_strreplace(tmp, ",", "=2D");
+	tmp2 = purple_strreplace(tmp, ",", "=2C");
 	g_free(tmp);
 	return tmp2;
 }
--- a/libpurple/protocols/jabber/bosh.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/bosh.c	Sun Mar 13 18:14:04 2011 +0000
@@ -365,6 +365,8 @@
 	chosen = find_available_http_connection(conn);
 
 	if (!chosen) {
+		if (type == PACKET_FLUSH)
+			return;
 		/*
 		 * For non-ordinary traffic, we can't 'buffer' it, so use the
 		 * first connection.
@@ -472,6 +474,8 @@
 	if (!bosh->pipelining)
 		return;
 
+	purple_debug_info("jabber", "BOSH: Disabling pipelining on conn %p\n",
+	                            bosh);
 	bosh->pipelining = FALSE;
 	if (bosh->connections[1] == NULL) {
 		bosh->connections[1] = jabber_bosh_http_connection_init(bosh);
@@ -480,7 +484,13 @@
 		/* Shouldn't happen; this should be the only place pipelining
 		 * is turned off.
 		 */
+#if GLIB_CHECK_VERSION(2,16,0)
 		g_warn_if_reached();
+#else
+		g_log(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
+				"(%s:%d):%s%s code should not be reached",
+				__FILE__, __LINE__, G_STRFUNC, G_STRFUNC[0] ? ":" : "");
+#endif
 	}
 }
 
--- a/libpurple/protocols/jabber/chat.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sun Mar 13 18:14:04 2011 +0000
@@ -237,6 +237,7 @@
 
 	chat = g_new0(JabberChat, 1);
 	chat->js = js;
+	chat->joined = 0;
 
 	chat->room = g_strdup(room);
 	chat->server = g_strdup(server);
@@ -280,6 +281,14 @@
 
 	char *jid;
 
+	char *history_maxchars;
+	char *history_maxstanzas;
+	char *history_seconds;
+	char *history_since;
+
+	struct tm history_since_datetime;
+	const char *history_since_string = NULL;
+
 	chat = jabber_chat_new(js, room, server, handle, password, data);
 	if (chat == NULL)
 		return NULL;
@@ -296,6 +305,22 @@
 	xmlnode_set_attrib(presence, "to", jid);
 	g_free(jid);
 
+	history_maxchars   = g_hash_table_lookup(data, "history_maxchars");
+	history_maxstanzas = g_hash_table_lookup(data, "history_maxstanzas");
+	history_seconds    = g_hash_table_lookup(data, "history_seconds");
+	history_since      = g_hash_table_lookup(data, "history_since");
+
+	if (history_since) {
+		if (purple_str_to_time(history_since, TRUE, &history_since_datetime, NULL, NULL) != 0) {
+			history_since_string = purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", &history_since_datetime);
+		} else {
+			history_since_string = NULL;
+
+			purple_debug_error("jabber", "Invalid date format for history_since"
+			                             " while requesting history: %s", history_since);
+		}
+	}
+
 	x = xmlnode_new_child(presence, "x");
 	xmlnode_set_namespace(x, "http://jabber.org/protocol/muc");
 
@@ -304,6 +329,27 @@
 		xmlnode_insert_data(p, password, -1);
 	}
 
+	if ((history_maxchars && *history_maxchars)
+	    || (history_maxstanzas && *history_maxstanzas)
+	    || (history_seconds && *history_seconds)
+	    || (history_since_string && *history_since_string)) {
+
+		xmlnode *history = xmlnode_new_child(x, "history");
+
+		if (history_maxchars && *history_maxchars) {
+			xmlnode_set_attrib(history, "maxchars", history_maxchars);
+		}
+		if (history_maxstanzas && *history_maxstanzas) {
+			xmlnode_set_attrib(history, "maxstanzas", history_maxstanzas);
+		}
+		if (history_seconds && *history_seconds) {
+			xmlnode_set_attrib(history, "seconds", history_seconds);
+		}
+		if (history_since_string && *history_since_string) {
+			xmlnode_set_attrib(history, "since", history_since_string);
+		}
+	}
+
 	jabber_send(js, presence);
 	xmlnode_free(presence);
 
--- a/libpurple/protocols/jabber/chat.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/chat.h	Sun Mar 13 18:14:04 2011 +0000
@@ -52,6 +52,7 @@
 	void *config_dialog_handle;
 	GHashTable *members;
 	gboolean left;
+	time_t joined;
 } JabberChat;
 
 GList *jabber_chat_info(PurpleConnection *gc);
--- a/libpurple/protocols/jabber/jabber.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sun Mar 13 18:14:04 2011 +0000
@@ -2619,6 +2619,7 @@
 			if(!(server = g_hash_table_lookup(components, "server")))
 				continue;
 
+			/* FIXME: Collate is wrong in a few cases here; this should be prepped */
 			if(jid->node && jid->domain &&
 					!g_utf8_collate(room, jid->node) && !g_utf8_collate(server, jid->domain)) {
 				jabber_id_free(jid);
@@ -3007,21 +3008,44 @@
 {
 	JabberChat *chat = jabber_chat_find_by_conv(conv);
 	GHashTable *components;
-
-	if(!chat || !args || !args[0])
+	JabberID *jid;
+	const char *room = NULL, *server = NULL, *handle = NULL;
+
+	if (!chat || !args || !args[0])
 		return PURPLE_CMD_RET_FAILED;
 
 	components = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
 
-	g_hash_table_replace(components, "room", args[0]);
-	g_hash_table_replace(components, "server", chat->server);
-	g_hash_table_replace(components, "handle", chat->handle);
-	if(args[1])
-		g_hash_table_replace(components, "password", args[1]);
+	jid = jabber_id_new(args[0]);
+	if (jid) {
+		room   = jid->node;
+		server = jid->domain;
+		handle = jid->resource ? jid->resource : chat->handle;
+	} else {
+		/* If jabber_id_new failed, the user may have just passed in
+		 * a room name.  For backward compatibility, handle that here.
+		 */
+		if (strchr(args[0], '@')) {
+			*error = g_strdup(_("Invalid XMPP ID"));
+			return PURPLE_CMD_RET_FAILED;
+		}
+
+		room   = args[0];
+		server = chat->server;
+		handle = chat->handle;
+	}
+
+	g_hash_table_insert(components, "room", (gpointer)room);
+	g_hash_table_insert(components, "server", (gpointer)server);
+	g_hash_table_insert(components, "handle", (gpointer)handle);
+
+	if (args[1])
+		g_hash_table_insert(components, "password", args[1]);
 
 	jabber_chat_join(purple_conversation_get_gc(conv), components);
 
 	g_hash_table_destroy(components);
+	jabber_id_free(jid);
 	return PURPLE_CMD_RET_OK;
 }
 
@@ -3649,6 +3673,7 @@
 	                  PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, "prpl-jabber",
 	                  jabber_cmd_chat_join,
 	                  _("join: &lt;room&gt; [password]:  Join a chat on this server."),
+	                  /* _("join: &lt;room[@server]&gt; [password]:  Join a chat."), */
 	                  NULL);
 	commands = g_slist_prepend(commands, GUINT_TO_POINTER(id));
 
--- a/libpurple/protocols/jabber/jutil.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Sun Mar 13 18:14:04 2011 +0000
@@ -501,12 +501,9 @@
 jabber_id_free(JabberID *jid)
 {
 	if(jid) {
-		if(jid->node)
-			g_free(jid->node);
-		if(jid->domain)
-			g_free(jid->domain);
-		if(jid->resource)
-			g_free(jid->resource);
+		g_free(jid->node);
+		g_free(jid->domain);
+		g_free(jid->resource);
 		g_free(jid);
 	}
 }
--- a/libpurple/protocols/jabber/message.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/message.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1140,6 +1140,12 @@
 	if(!who || !msg)
 		return 0;
 
+	if (purple_debug_is_verbose()) {
+		/* TODO: Maybe we need purple_debug_is_really_verbose? :) */
+		purple_debug_misc("jabber", "jabber_message_send_im: who='%s'\n"
+		                            "\tmsg='%s'\n", who, msg);
+	}
+
 	resource = jabber_get_resource(who);
 
 	jb = jabber_buddy_find(gc->proto_data, who, TRUE);
--- a/libpurple/protocols/jabber/presence.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sun Mar 13 18:14:04 2011 +0000
@@ -588,7 +588,9 @@
 			role = xmlnode_get_attrib(presence->chat_info.item, "role");
 		}
 
-		if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(110)))
+		if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(110)) ||
+				g_str_equal(presence->jid_from->resource, chat->handle) ||
+				purple_strequal(presence->to, jid))
 			is_our_resource = TRUE;
 
 		if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(201))) {
@@ -639,10 +641,14 @@
 
 		if(!jabber_chat_find_buddy(chat->conv, presence->jid_from->resource))
 			purple_conv_chat_add_user(PURPLE_CONV_CHAT(chat->conv), presence->jid_from->resource,
-					jid, flags, !presence->delayed);
+					jid, flags, chat->joined > 0 && ((!presence->delayed) || (presence->sent > chat->joined)));
 		else
 			purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(chat->conv), presence->jid_from->resource,
 					flags);
+
+		if (is_our_resource && chat->joined == 0)
+			chat->joined = time(NULL);
+
 	} else if (presence->type == JABBER_PRESENCE_UNAVAILABLE) {
 		gboolean nick_change = FALSE;
 		gboolean kick = FALSE;
@@ -661,7 +667,7 @@
 			return FALSE;
 		}
 
-		is_our_resource = (0 == g_utf8_collate(presence->jid_from->resource, chat->handle));
+		is_our_resource = g_str_equal(presence->jid_from->resource, chat->handle);
 
 		jabber_buddy_remove_resource(presence->jb, presence->jid_from->resource);
 
@@ -669,8 +675,10 @@
 			jid = xmlnode_get_attrib(presence->chat_info.item, "jid");
 
 		if (chat->muc) {
-			if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(110)))
+			if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(110))) {
 				is_our_resource = TRUE;
+				chat->joined = 0;
+			}
 
 			if (g_slist_find(presence->chat_info.codes, GINT_TO_POINTER(301))) {
 				/* XXX: We got banned.  YAY! (No GIR, that's bad) */
@@ -691,6 +699,7 @@
 					if (g_str_equal(presence->jid_from->resource, chat->handle)) {
 						/* Changing our own nickname */
 						g_free(chat->handle);
+						/* TODO: This should be resourceprep'd */
 						chat->handle = g_strdup(nick);
 					}
 
@@ -1158,9 +1167,6 @@
 static void
 parse_delay(JabberStream *js, JabberPresence *presence, xmlnode *delay)
 {
-	/* XXX: compare the time.  Can happen on presence stanzas that aren't
-	 * actually delayed.
-	 */
 	const char *stamp = xmlnode_get_attrib(delay, "stamp");
 	presence->delayed = TRUE;
 	presence->sent = purple_str_to_time(stamp, TRUE, NULL, NULL, NULL);
--- a/libpurple/protocols/jabber/si.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/jabber/si.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1699,7 +1699,7 @@
 		return;
 
 	if((filesize_c = xmlnode_get_attrib(file, "size")))
-		filesize = atoi(filesize_c);
+		filesize = strtoul(filesize_c, NULL, 10);
 
 	if(!(feature = xmlnode_get_child(si, "feature")))
 		return;
--- a/libpurple/protocols/msn/Makefile.mingw	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/Makefile.mingw	Sun Mar 13 18:14:04 2011 +0000
@@ -65,6 +65,7 @@
 			sbconn.c \
 			switchboard.c \
 			table.c \
+			tlv.c \
 			transaction.c \
 			user.c \
 			userlist.c \
--- a/libpurple/protocols/msn/contact.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/contact.c	Sun Mar 13 18:14:04 2011 +0000
@@ -363,10 +363,9 @@
 	char *type;
 	char *member_id;
 	MsnUser *user;
-	xmlnode *annotation, *display;
+	xmlnode *annotation;
 	guint nid = MSN_NETWORK_UNKNOWN;
 	char *invite = NULL;
-	char *display_text;
 
 	passport = xmlnode_get_data(xmlnode_get_child(member, node));
 	if (!msn_email_is_valid(passport)) {
@@ -376,13 +375,8 @@
 
 	type = xmlnode_get_data(xmlnode_get_child(member, "Type"));
 	member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId"));
-	if ((display = xmlnode_get_child(member, "DisplayName"))) {
-		display_text = xmlnode_get_data(display);
-	} else {
-		display_text = NULL;
-	}
 
-	user = msn_userlist_find_add_user(session->userlist, passport, display_text);
+	user = msn_userlist_find_add_user(session->userlist, passport, NULL);
 
 	for (annotation = xmlnode_get_child(member, "Annotations/Annotation");
 	     annotation;
@@ -423,7 +417,6 @@
 	g_free(type);
 	g_free(member_id);
 	g_free(invite);
-	g_free(display_text);
 }
 
 static void
--- a/libpurple/protocols/msn/msn.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/msn.c	Sun Mar 13 18:14:04 2011 +0000
@@ -110,11 +110,9 @@
 
 	g_return_val_if_fail(str != NULL, NULL);
 
-	g_snprintf(buf, sizeof(buf), "%s%s", str,
-			   (strchr(str, '@') ? "" : "@hotmail.com"));
-
-	tmp = g_utf8_strdown(buf, -1);
-	strncpy(buf, tmp, sizeof(buf));
+	tmp = g_strchomp(g_utf8_strdown(str, -1));
+	g_snprintf(buf, sizeof(buf), "%s%s", tmp,
+			   (strchr(tmp, '@') ? "" : "@hotmail.com"));
 	g_free(tmp);
 
 	return buf;
@@ -931,8 +929,8 @@
 		if (session) {
 			MsnUser *user = msn_userlist_find_user(session->userlist, who);
 			if (user) {
-				/* Include these too: MSN_CLIENT_CAP_MSNMOBILE|MSN_CLIENT_CAP_MSNDIRECT ? */
-				if ((user->clientid & MSN_CLIENT_CAP_WEBMSGR) ||
+				/* Include these too: MSN_CAP_MOBILE_ON|MSN_CAP_WEB_WATCH ? */
+				if ((user->clientid & MSN_CAP_VIA_WEBIM) ||
 						user->networkid == MSN_NETWORK_YAHOO)
 					ret = FALSE;
 				else
@@ -961,16 +959,16 @@
 	MsnUser *user = purple_buddy_get_protocol_data(b);
 
 	if (user != NULL) {
-		if (user->clientid & MSN_CLIENT_CAP_BOT)
+		if (user->clientid & MSN_CAP_BOT)
 			return "bot";
-		if (user->clientid & MSN_CLIENT_CAP_WIN_MOBILE)
+		if (user->clientid & MSN_CAP_VIA_MOBILE)
 			return "mobile";
 #if 0
 		/* XXX: Since we don't support this, there's no point in showing it just yet */
-		if (user->clientid & MSN_CLIENT_CAP_SCHANNEL)
+		if (user->clientid & MSN_CAP_SCHANNEL)
 			return "secure";
 #endif
-		if (user->clientid & MSN_CLIENT_CAP_WEBMSGR)
+		if (user->clientid & MSN_CAP_VIA_WEBIM)
 			return "external";
 		if (user->networkid == MSN_NETWORK_YAHOO)
 			return "yahoo";
@@ -1746,38 +1744,33 @@
                   MsnUser *user)
 {
 	char *group;
+	MsnUserList *userlist;
+	MsnUser *user2;
 
 	g_return_if_fail(user != NULL);
 
+	if (network == MSN_NETWORK_UNKNOWN) {
+		purple_debug_error("msn", "Network in FQY response was unknown.  "
+				"Assuming %s is a passport user and adding anyway.\n", who);
+		network = MSN_NETWORK_PASSPORT;
+	}
+
 	group = msn_user_remove_pending_group(user);
 
-	if (network != MSN_NETWORK_UNKNOWN) {
-		MsnUserList *userlist = session->userlist;
-		MsnUser *user2 = msn_userlist_find_user(userlist, who);
-		if (user2 != NULL) {
-			/* User already in userlist, so just update it. */
-			msn_user_unref(user);
-			user = user2;
-		} else {
-			msn_userlist_add_user(userlist, user);
-		}
-
-		msn_user_set_network(user, network);
-		msn_userlist_add_buddy(userlist, who, group);
-	}
-	else
-	{
-		PurpleBuddy * buddy = purple_find_buddy(session->account, who);
-		gchar *buf;
-		buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid.  Usernames must be valid email addresses."), who);
-		if (!purple_conv_present_error(who, session->account, buf))
-			purple_notify_error(purple_account_get_connection(session->account), NULL, _("Unable to Add"), buf);
-		g_free(buf);
-
-		/* Remove from local list */
-		purple_blist_remove_buddy(buddy);
+	userlist = session->userlist;
+	user2 = msn_userlist_find_user(userlist, who);
+	if (user2 != NULL) {
+		/* User already in userlist, so just update it. */
+		msn_user_unref(user);
+		user = user2;
+	} else {
+		msn_userlist_add_user(userlist, user);
 		msn_user_unref(user);
 	}
+
+	msn_user_set_network(user, network);
+	msn_userlist_add_buddy(userlist, who, group);
+
 	g_free(group);
 }
 
@@ -1814,7 +1807,10 @@
 
 	/* XXX - Would group ever be NULL here?  I don't think so...
 	 * shx: Yes it should; MSN handles non-grouped buddies, and this is only
-	 * internal. */
+	 * internal.
+	 * KingAnt: But PurpleBuddys must always exist inside PurpleGroups, so
+	 * won't group always be non-NULL here?
+	 */
 	user = msn_userlist_find_user(userlist, who);
 	if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) {
 		/* We already know this buddy and their network. This function knows
@@ -1829,10 +1825,13 @@
 		msn_user_set_invite_message(user, msg);
 		msn_user_set_pending_group(user, gname);
 		msn_user_set_network(user, MSN_NETWORK_UNKNOWN);
+		/* Should probably re-use the msn_add_contact_xml function here */
 		tokens = g_strsplit(who, "@", 2);
 		fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>",
 		                      tokens[1],
 		                      tokens[0]);
+		/* TODO: I think user will leak if we disconnect before receiving
+		         a response to this FQY request */
 		msn_notification_send_fqy(session, fqy, strlen(fqy),
 		                          (MsnFqyCb)add_pending_buddy, user);
 		g_free(fqy);
--- a/libpurple/protocols/msn/msn.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/msn.h	Sun Mar 13 18:14:04 2011 +0000
@@ -26,34 +26,65 @@
 
 typedef enum
 {
-	MSN_CLIENT_CAP_WIN_MOBILE = 0x0000001,
-	MSN_CLIENT_CAP_INK_GIF    = 0x0000004,
-	MSN_CLIENT_CAP_INK_ISF    = 0x0000008,
-	MSN_CLIENT_CAP_VIDEO_CHAT = 0x0000010,
-	MSN_CLIENT_CAP_PACKET     = 0x0000020,
-	MSN_CLIENT_CAP_MSNMOBILE  = 0x0000040,
-	MSN_CLIENT_CAP_MSNDIRECT  = 0x0000080,
-	MSN_CLIENT_CAP_WEBMSGR    = 0x0000200,
-	MSN_CLIENT_CAP_TGW        = 0x0000800,
-	MSN_CLIENT_CAP_SPACE      = 0x0001000,
-	MSN_CLIENT_CAP_MCE        = 0x0002000,
-	MSN_CLIENT_CAP_DIRECTIM   = 0x0004000,
-	MSN_CLIENT_CAP_WINKS      = 0x0008000,
-	MSN_CLIENT_CAP_SEARCH     = 0x0010000,
-	MSN_CLIENT_CAP_BOT        = 0x0020000,
-	MSN_CLIENT_CAP_VOICEIM    = 0x0040000,
-	MSN_CLIENT_CAP_SCHANNEL   = 0x0080000,
-	MSN_CLIENT_CAP_SIP_INVITE = 0x0100000,
-	MSN_CLIENT_CAP_SDRIVE     = 0x0400000,
-	MSN_CLIENT_CAP_ONECARE    = 0x1000000,
-	MSN_CLIENT_CAP_P2P_TURN   = 0x2000000,
-	MSN_CLIENT_CAP_P2P_BOOTSTRAP_VIA_UUN = 0x4000000,
+	MSN_CAP_VIA_MOBILE    = 0x0000001,
+	MSN_CAP_VIA_TEXAS     = 0x0000002,
+	MSN_CAP_INK_GIF       = 0x0000004,
+	MSN_CAP_INK_ISF       = 0x0000008,
+	MSN_CAP_VIDEO_CHAT    = 0x0000010,
+	MSN_CAP_PACKET        = 0x0000020,
+	MSN_CAP_MOBILE_ON     = 0x0000040,
+	MSN_CAP_WEB_WATCH     = 0x0000080,
+	MSN_CAP_ACTIVITIES    = 0x0000100,
+	MSN_CAP_VIA_WEBIM     = 0x0000200,
+	MSN_CAP_MOBILE_DEV    = 0x0000400,
+	MSN_CAP_VIA_FEDERATED = 0x0000800,
+	MSN_CAP_SPACE         = 0x0001000,
+	MSN_CAP_MCE           = 0x0002000,
+	MSN_CAP_DIRECTIM      = 0x0004000,
+	MSN_CAP_WINKS         = 0x0008000,
+	MSN_CAP_SEARCH        = 0x0010000,
+	MSN_CAP_BOT           = 0x0020000,
+	MSN_CAP_VOICEIM       = 0x0040000,
+	MSN_CAP_SCHANNEL      = 0x0080000,
+	MSN_CAP_SIP_INVITE    = 0x0100000,
+	MSN_CAP_MULTI_VV      = 0x0200000,
+	MSN_CAP_SDRIVE        = 0x0400000,
+	MSN_CAP_PAGEMODE_MSG  = 0x080000,
+	MSN_CAP_ONECARE       = 0x1000000,
+	MSN_CAP_P2P_TURN      = 0x2000000,
+	MSN_CAP_P2P_BOOTSTRAP_VIA_UUN = 0x4000000,
+	MSN_CAP_ALIASED       = 0x8000000
 } MsnClientCaps;
 
 typedef enum
 {
-	MSN_CLIENT_EXT_CAP_RTC_VIDEO = 0x10,
-	MSN_CLIENT_EXT_CAP_P2PV2     = 0x20
+	MSN_EXT_CAP_SMS_ONLY            = 0x1,
+	MSN_EXT_CAP_VOICE_OVER_MSNP     = 0x2,
+	MSN_EXT_CAP_UUCP_SIP            = 0x4,
+	MSN_EXT_CAP_APP_MSGS            = 0x8,
+	MSN_EXT_CAP_RTC_VIDEO           = 0x10,
+	MSN_EXT_CAP_P2PV2               = 0x20,
+	MSN_EXT_CAP_AUTH_WEBIM          = 0x40,
+	MSN_EXT_CAP_1ON1_VIA_GROUP      = 0x80,
+	MSN_EXT_CAP_OFFLINEIM           = 0x100,
+	MSN_EXT_CAP_SHARING_VIDEO       = 0x200,
+	MSN_EXT_CAP_NUDGE               = 0x400,
+	MSN_EXT_CAP_CIRCLE_VOICEIM      = 0x800,
+	MSN_EXT_CAP_SHARING             = 0x1000,
+	MSN_EXT_CAP_P2P_MIXER_RELAY     = 0x8000,
+	MSN_EXT_CAP_CONV_WINDOW_FT      = 0x20000,
+	MSN_EXT_CAP_VIDEO_16x9          = 0x40000,
+	MSN_EXT_CAP_P2P_ENVELOPE        = 0x80000,
+	MSN_EXT_CAP_YAHOOIM_DISABLE     = 0x400000,
+	MSN_EXT_CAP_SIP_TUNNELv2        = 0x800000,
+	MSN_EXT_CAP_VOICE_CLIP_WMA      = 0x1000000,
+	MSN_EXT_CAP_VOICE_CLIP_CIRCLEIM = 0x2000000,
+	MSN_EXT_CAP_SOCIAL_NEWS         = 0x4000000,
+	MSN_EXT_CAP_CUSTOM_SMILEY       = 0x8000000,
+	MSN_EXT_CAP_UTF8_MOODS          = 0x10000000,
+	MSN_EXT_CAP_FTURN               = 0x20000000,
+	MSN_EXT_CAP_P4_ACTIVITY         = 0x40000000,
+	MSN_EXT_CAP_MUC                 = 0x80000000
 } MsnClientExtCaps;
 
 typedef enum
@@ -68,7 +99,8 @@
 	MSN_CLIENT_VER_8_1  = 0x70,	/* MSNC7 */
 	MSN_CLIENT_VER_8_5  = 0x80,	/* MSNC8 */
 	MSN_CLIENT_VER_9_0  = 0x90,	/* MSNC9 */
-	MSN_CLIENT_VER_14_0 = 0xA0	/* MSNC10 */
+	MSN_CLIENT_VER_14_0 = 0xA0,	/* MSNC10 */
+	MSN_CLIENT_VER_15_0 = 0xB0	/* MSNC11 */
 } MsnClientVerId;
 
 #include "internal.h"
@@ -109,7 +141,7 @@
 #define MSN_NUDGE 0
 
 #define MSN_CLIENT_ID_VERSION      MSN_CLIENT_VER_9_0
-#define MSN_CLIENT_ID_CAPABILITIES (MSN_CLIENT_CAP_PACKET|MSN_CLIENT_CAP_INK_GIF|MSN_CLIENT_CAP_VOICEIM)
+#define MSN_CLIENT_ID_CAPABILITIES (MSN_CAP_PACKET|MSN_CAP_INK_GIF|MSN_CAP_VOICEIM)
 #define MSN_CLIENT_ID_EXT_CAPS     (0)
 
 #define MSN_CLIENT_ID \
--- a/libpurple/protocols/msn/notification.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/notification.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1099,7 +1099,7 @@
 
 	msn_user_set_object(user, msnobj);
 
-	user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+');
+	user->mobile = (clientid & MSN_CAP_MOBILE_ON) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+');
 	msn_user_set_clientid(user, clientid);
 	msn_user_set_extcaps(user, extcaps);
 	msn_user_set_network(user, networkid);
@@ -1274,7 +1274,7 @@
 	else
 		extcaps = 0;
 
-	user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+');
+	user->mobile = (clientid & MSN_CAP_MOBILE_ON) || (user->extinfo && user->extinfo->phone_mobile && user->extinfo->phone_mobile[0] == '+');
 
 	msn_user_set_clientid(user, clientid);
 	msn_user_set_extcaps(user, extcaps);
--- a/libpurple/protocols/msn/p2p.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/p2p.c	Sun Mar 13 18:14:04 2011 +0000
@@ -23,72 +23,229 @@
  */
 
 #include "internal.h"
+#include "debug.h"
 
 #include "p2p.h"
+#include "tlv.h"
 #include "msnutils.h"
 
 MsnP2PInfo *
-msn_p2p_info_new(void)
+msn_p2p_info_new(MsnP2PVersion version)
 {
-	return g_new0(MsnP2PInfo, 1);
+	MsnP2PInfo *info = g_new0(MsnP2PInfo, 1);
+	info->version = version;
+
+	switch (version) {
+		case MSN_P2P_VERSION_ONE:
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", version);
+			g_free(info);
+			info = NULL;
+	}
+
+	return info;
 }
 
 MsnP2PInfo *
 msn_p2p_info_dup(MsnP2PInfo *info)
 {
 	MsnP2PInfo *new_info = g_new0(MsnP2PInfo, 1);
-	*new_info = *info;
+
+	new_info->version = info->version;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			*new_info = *info;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			*new_info = *info;
+			new_info->header.v2.header_tlv = msn_tlvlist_copy(info->header.v2.header_tlv);
+			new_info->header.v2.data_tlv = msn_tlvlist_copy(info->header.v2.data_tlv);
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+			g_free(new_info);
+			new_info = NULL;
+	}
+
 	return new_info;
 }
 
 void
 msn_p2p_info_free(MsnP2PInfo *info)
 {
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			/* Nothing to do! */
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			msn_tlvlist_free(info->header.v2.header_tlv);
+			msn_tlvlist_free(info->header.v2.data_tlv);
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
 	g_free(info);
 }
 
 size_t
-msn_p2p_header_from_wire(MsnP2PInfo *info, const char *wire)
+msn_p2p_header_from_wire(MsnP2PInfo *info, const char *wire, size_t max_len)
 {
-	MsnP2PHeader *header;
+	size_t len = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE: {
+			MsnP2PHeader *header = &info->header.v1;
+
+			if (max_len < P2P_PACKET_HEADER_SIZE) {
+				/* Invalid packet length */
+				len = 0;
+				break;
+			}
 
-	header = &info->header;
+			header->session_id = msn_pop32le(wire);
+			header->id         = msn_pop32le(wire);
+			header->offset     = msn_pop64le(wire);
+			header->total_size = msn_pop64le(wire);
+			header->length     = msn_pop32le(wire);
+			header->flags      = msn_pop32le(wire);
+			header->ack_id     = msn_pop32le(wire);
+			header->ack_sub_id = msn_pop32le(wire);
+			header->ack_size   = msn_pop64le(wire);
+
+			len = P2P_PACKET_HEADER_SIZE;
+			break;
+		}
+
+		case MSN_P2P_VERSION_TWO: {
+			MsnP2Pv2Header *header = &info->header.v2;
 
-	header->session_id = msn_pop32le(wire);
-	header->id         = msn_pop32le(wire);
-	header->offset     = msn_pop64le(wire);
-	header->total_size = msn_pop64le(wire);
-	header->length     = msn_pop32le(wire);
-	header->flags      = msn_pop32le(wire);
-	header->ack_id     = msn_pop32le(wire);
-	header->ack_sub_id = msn_pop32le(wire);
-	header->ack_size   = msn_pop64le(wire);
+			header->header_len = msn_pop8(wire);
+			header->opcode = msn_pop8(wire);
+			header->message_len = msn_pop16be(wire);
+			header->base_id = msn_pop32be(wire);
+			if (header->header_len + header->message_len + P2P_PACKET_FOOTER_SIZE > max_len) {
+				/* Invalid header and data length */
+				len = 0;
+				break;
+			}
+
+			if (header->header_len > 8) {
+				header->header_tlv = msn_tlvlist_read(wire, header->header_len - 8);
+				wire += header->header_len - 8;
+			}
+
+			if (header->message_len > 0) {
+				/* Parse Data packet */
 
-	return P2P_PACKET_HEADER_SIZE;
+				header->data_header_len = msn_pop8(wire);
+				if (header->data_header_len > header->message_len) {
+					/* Invalid data header length */
+					len = 0;
+					break;
+				}
+				header->data_tf = msn_pop8(wire);
+				header->package_number = msn_pop16be(wire);
+				header->session_id = msn_pop32be(wire);
+
+				if (header->data_header_len > 8) {
+					header->data_tlv = msn_tlvlist_read(wire, header->data_header_len - 8);
+					wire += header->data_header_len - 8;
+				}
+			}
+
+			len = header->header_len + header->message_len;
+
+			break;
+		}
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return len;
 }
 
 char *
 msn_p2p_header_to_wire(MsnP2PInfo *info, size_t *len)
 {
-	MsnP2PHeader *header;
-	char *wire;
+	char *wire = NULL;
 	char *tmp;
 
-	header = &info->header;
-	tmp = wire = g_new(char, P2P_PACKET_HEADER_SIZE);
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE: {
+			MsnP2PHeader *header = &info->header.v1;
+			tmp = wire = g_new(char, P2P_PACKET_HEADER_SIZE);
+
+			msn_push32le(tmp, header->session_id);
+			msn_push32le(tmp, header->id);
+			msn_push64le(tmp, header->offset);
+			msn_push64le(tmp, header->total_size);
+			msn_push32le(tmp, header->length);
+			msn_push32le(tmp, header->flags);
+			msn_push32le(tmp, header->ack_id);
+			msn_push32le(tmp, header->ack_sub_id);
+			msn_push64le(tmp, header->ack_size);
+
+			if (len)
+				*len = P2P_PACKET_HEADER_SIZE;
+
+			break;
+		}
+
+		case MSN_P2P_VERSION_TWO: {
+			MsnP2Pv2Header *header = &info->header.v2;
+
+			if (header->header_tlv != NULL)
+				header->header_len = msn_tlvlist_size(header->header_tlv) + 8;
+			else
+				header->header_len = 8;
 
-	msn_push32le(tmp, header->session_id);
-	msn_push32le(tmp, header->id);
-	msn_push64le(tmp, header->offset);
-	msn_push64le(tmp, header->total_size);
-	msn_push32le(tmp, header->length);
-	msn_push32le(tmp, header->flags);
-	msn_push32le(tmp, header->ack_id);
-	msn_push32le(tmp, header->ack_sub_id);
-	msn_push64le(tmp, header->ack_size);
+			if (header->data_tlv != NULL)
+				header->data_header_len = msn_tlvlist_size(header->data_tlv) + 8;
+			else
+				header->data_header_len = 8;
+
+			tmp = wire = g_new(char, header->header_len + header->data_header_len);
+
+			msn_push8(tmp, header->header_len);
+			msn_push8(tmp, header->opcode);
+			msn_push16be(tmp, header->data_header_len + header->message_len);
+			msn_push32be(tmp, header->base_id);
+
+			if (header->header_tlv != NULL) {
+				msn_tlvlist_write(tmp, header->header_len - 8, header->header_tlv);
+				tmp += header->header_len - 8;
+			}
 
-	if (len)
-		*len = P2P_PACKET_HEADER_SIZE;
+			msn_push8(tmp, header->data_header_len);
+			msn_push8(tmp, header->data_tf);
+			msn_push16be(tmp, header->package_number);
+			msn_push32be(tmp, header->session_id);
+
+			if (header->data_tlv != NULL) {
+				msn_tlvlist_write(tmp, header->data_header_len - 8, header->data_tlv);
+				tmp += header->data_header_len - 8;
+			}
+
+			if (len)
+				*len = header->header_len + header->data_header_len;
+
+			break;
+		}
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 
 	return wire;
 
@@ -127,15 +284,30 @@
 void
 msn_p2p_info_to_string(MsnP2PInfo *info, GString *str)
 {
-	g_string_append_printf(str, "Session ID: %u\r\n", info->header.session_id);
-	g_string_append_printf(str, "ID:         %u\r\n", info->header.id);
-	g_string_append_printf(str, "Offset:     %" G_GUINT64_FORMAT "\r\n", info->header.offset);
-	g_string_append_printf(str, "Total size: %" G_GUINT64_FORMAT "\r\n", info->header.total_size);
-	g_string_append_printf(str, "Length:     %u\r\n", info->header.length);
-	g_string_append_printf(str, "Flags:      0x%x\r\n", info->header.flags);
-	g_string_append_printf(str, "ACK ID:     %u\r\n", info->header.ack_id);
-	g_string_append_printf(str, "SUB ID:     %u\r\n", info->header.ack_sub_id);
-	g_string_append_printf(str, "ACK Size:   %" G_GUINT64_FORMAT "\r\n", info->header.ack_size);
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE: {
+			MsnP2PHeader *header = &info->header.v1;
+			g_string_append_printf(str, "Session ID: %u\r\n", header->session_id);
+			g_string_append_printf(str, "ID:         %u\r\n", header->id);
+			g_string_append_printf(str, "Offset:     %" G_GUINT64_FORMAT "\r\n", header->offset);
+			g_string_append_printf(str, "Total size: %" G_GUINT64_FORMAT "\r\n", header->total_size);
+			g_string_append_printf(str, "Length:     %u\r\n", header->length);
+			g_string_append_printf(str, "Flags:      0x%x\r\n", header->flags);
+			g_string_append_printf(str, "ACK ID:     %u\r\n", header->ack_id);
+			g_string_append_printf(str, "SUB ID:     %u\r\n", header->ack_sub_id);
+			g_string_append_printf(str, "ACK Size:   %" G_GUINT64_FORMAT "\r\n", header->ack_size);
+
+			break;
+		}
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
 	g_string_append_printf(str, "Footer:     0x%08X\r\n", info->footer.value);
 }
 
@@ -150,67 +322,232 @@
 gboolean
 msn_p2p_info_is_valid(MsnP2PInfo *info)
 {
-	return info->header.total_size >= info->header.length;
+	gboolean valid = FALSE;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			valid = info->header.v1.total_size >= info->header.v1.length;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return valid;
 }
 
 gboolean
 msn_p2p_info_is_final(MsnP2PInfo *info)
 {
-	return info->header.offset + info->header.length >= info->header.total_size;
+	gboolean final = FALSE;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			final = info->header.v1.offset + info->header.v1.length >= info->header.v1.total_size;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return final;
 }
 
 guint32
 msn_p2p_info_get_session_id(MsnP2PInfo *info)
 {
-	return info->header.session_id;
+	guint32 session_id = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			session_id = info->header.v1.session_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return session_id;
 }
 
 guint32
 msn_p2p_info_get_id(MsnP2PInfo *info)
 {
-	return info->header.id;
+	guint32 id = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			id = info->header.v1.id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return id;
 }
 
 guint64
 msn_p2p_info_get_offset(MsnP2PInfo *info)
 {
-	return info->header.offset;
+	guint64 offset = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			offset = info->header.v1.offset;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return offset;
 }
 
 guint64
 msn_p2p_info_get_total_size(MsnP2PInfo *info)
 {
-	return info->header.total_size;
+	guint64 total_size = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			total_size = info->header.v1.total_size;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return total_size;
 }
 
 guint32
 msn_p2p_info_get_length(MsnP2PInfo *info)
 {
-	return info->header.length;
+	guint32 length = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			length = info->header.v1.length;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return length;
 }
 
 guint32
 msn_p2p_info_get_flags(MsnP2PInfo *info)
 {
-	return info->header.flags;
+	guint32 flags = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			flags = info->header.v1.flags;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return flags;
 }
 
 guint32
 msn_p2p_info_get_ack_id(MsnP2PInfo *info)
 {
-	return info->header.ack_id;
+	guint32 ack_id = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			ack_id = info->header.v1.ack_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return ack_id;
 }
 
 guint32
 msn_p2p_info_get_ack_sub_id(MsnP2PInfo *info)
 {
-	return info->header.ack_sub_id;
+	guint32 ack_sub_id = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			ack_sub_id = info->header.v1.ack_sub_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return ack_sub_id;
 }
 
 guint64
 msn_p2p_info_get_ack_size(MsnP2PInfo *info)
 {
-	return info->header.ack_size;
+	guint64 ack_size = 0;
+
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			ack_size = info->header.v1.ack_size;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
+	return ack_size;
 }
 
 guint32
@@ -222,55 +559,156 @@
 void
 msn_p2p_info_set_session_id(MsnP2PInfo *info, guint32 session_id)
 {
-	info->header.session_id = session_id;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.session_id = session_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
 }
 
 void
 msn_p2p_info_set_id(MsnP2PInfo *info, guint32 id)
 {
-	info->header.id = id;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.id = id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
+
 }
 
 void
 msn_p2p_info_set_offset(MsnP2PInfo *info, guint64 offset)
 {
-	info->header.offset = offset;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.offset = offset;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_total_size(MsnP2PInfo *info, guint64 total_size)
 {
-	info->header.total_size = total_size;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.total_size = total_size;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_length(MsnP2PInfo *info, guint32 length)
 {
-	info->header.length = length;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.length = length;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_flags(MsnP2PInfo *info, guint32 flags)
 {
-	info->header.flags = flags;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.flags = flags;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_ack_id(MsnP2PInfo *info, guint32 ack_id)
 {
-	info->header.ack_id = ack_id;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.ack_id = ack_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_ack_sub_id(MsnP2PInfo *info, guint32 ack_sub_id)
 {
-	info->header.ack_sub_id = ack_sub_id;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.ack_sub_id = ack_sub_id;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
 msn_p2p_info_set_ack_size(MsnP2PInfo *info, guint64 ack_size)
 {
-	info->header.ack_size = ack_size;
+	switch (info->version) {
+		case MSN_P2P_VERSION_ONE:
+			info->header.v1.ack_size = ack_size;
+			break;
+
+		case MSN_P2P_VERSION_TWO:
+			/* Nothing to do! */
+			break;
+
+		default:
+			purple_debug_error("msn", "Invalid P2P Info version: %d\n", info->version);
+	}
 }
 
 void
--- a/libpurple/protocols/msn/p2p.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/p2p.h	Sun Mar 13 18:14:04 2011 +0000
@@ -50,6 +50,13 @@
 	guint8  opcode;
 	guint16 message_len;
 	guint32 base_id;
+	GSList *header_tlv;
+	guint8  data_header_len;
+	guint8  data_tf;
+	guint16 package_number;
+	guint32 session_id;
+	GSList *data_tlv;
+/*	guint8  body[1]; */
 } MsnP2Pv2Header;
 
 typedef struct
@@ -58,8 +65,18 @@
 } MsnP2PFooter;
 #define P2P_PACKET_FOOTER_SIZE (1 * 4)
 
+typedef enum
+{
+	MSN_P2P_VERSION_ONE = 0,
+	MSN_P2P_VERSION_TWO = 1,
+} MsnP2PVersion;
+
 typedef struct {
-	MsnP2PHeader header;
+	MsnP2PVersion version;
+	union {
+		MsnP2PHeader v1;
+		MsnP2Pv2Header v2;
+	} header;
 	MsnP2PFooter footer;
 } MsnP2PInfo;
 
@@ -93,8 +110,15 @@
 	P2P_APPID_DISPLAY   = 0xC         /**< Display Image */
 } MsnP2PAppId;
 
+typedef enum
+{
+	P2P_OPCODE_NONE = 0x00,
+	P2P_OPCODE_SYN  = 0x01,
+	P2P_OPCODE_RAK  = 0x02
+} MsnP2Pv2OpCode;
+
 MsnP2PInfo *
-msn_p2p_info_new(void);
+msn_p2p_info_new(MsnP2PVersion version);
 
 MsnP2PInfo *
 msn_p2p_info_dup(MsnP2PInfo *info);
@@ -103,7 +127,7 @@
 msn_p2p_info_free(MsnP2PInfo *info);
 
 size_t
-msn_p2p_header_from_wire(MsnP2PInfo *info, const char *wire);
+msn_p2p_header_from_wire(MsnP2PInfo *info, const char *wire, size_t max_len);
 
 char *
 msn_p2p_header_to_wire(MsnP2PInfo *info, size_t *len);
--- a/libpurple/protocols/msn/session.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/session.c	Sun Mar 13 18:14:04 2011 +0000
@@ -46,7 +46,7 @@
 
 	session->user = msn_user_new(session->userlist,
 								 purple_account_get_username(account), NULL);
-	msn_userlist_add_user(session->userlist, msn_user_ref(session->user));
+	msn_userlist_add_user(session->userlist, session->user);
 	session->oim = msn_oim_new(session);
 
 	session->protocol_ver = 0;
--- a/libpurple/protocols/msn/slplink.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/slplink.c	Sun Mar 13 18:14:04 2011 +0000
@@ -289,7 +289,7 @@
 	/* Maybe we will want to create a new msg for this slpmsg instead of
 	 * reusing the same one all the time. */
 	info = slpmsg->p2p_info;
-	part = msn_slpmsgpart_new(info);
+	part = msn_slpmsgpart_new(msn_p2p_info_dup(info));
 	part->ack_data = slpmsg;
 
 	real_size = (msn_p2p_info_get_flags(info) == P2P_ACK) ? 0 : slpmsg->size;
--- a/libpurple/protocols/msn/slpmsg.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/slpmsg.c	Sun Mar 13 18:14:04 2011 +0000
@@ -48,7 +48,7 @@
 	else
 		slpmsg->slplink = NULL;
 
-	slpmsg->p2p_info = msn_p2p_info_new();
+	slpmsg->p2p_info = msn_p2p_info_new(MSN_P2P_VERSION_ONE);
 
 	return slpmsg;
 }
--- a/libpurple/protocols/msn/slpmsg_part.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/slpmsg_part.c	Sun Mar 13 18:14:04 2011 +0000
@@ -34,8 +34,7 @@
 
 	part = g_new0(MsnSlpMessagePart, 1);
 
-	if (info)
-		part->info = msn_p2p_info_dup(info);
+	part->info = info;
 
 	part->ack_cb = msn_slpmsgpart_ack;
 	part->nak_cb = msn_slpmsgpart_nak;
@@ -46,19 +45,20 @@
 MsnSlpMessagePart *msn_slpmsgpart_new_from_data(const char *data, size_t data_len)
 {
 	MsnSlpMessagePart *part;
+	MsnP2PInfo *info;
 	size_t len;
 	int body_len;
 
-	if (data_len < P2P_PACKET_HEADER_SIZE) {
+	info = msn_p2p_info_new(MSN_P2P_VERSION_ONE);
+
+	/* Extract the binary SLP header */
+	len = msn_p2p_header_from_wire(info, data, data_len);
+	if (len == 0) {
+		msn_p2p_info_free(info);
 		return NULL;
 	}
-
-	part = msn_slpmsgpart_new(NULL);
-	part->info = msn_p2p_info_new();
-
-	/* Extract the binary SLP header */
-	len = msn_p2p_header_from_wire(part->info, data);
 	data += len;
+	part = msn_slpmsgpart_new(info);
 
 	/* Extract the body */
 	body_len = data_len - len - P2P_PACKET_FOOTER_SIZE;
--- a/libpurple/protocols/msn/state.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/state.c	Sun Mar 13 18:14:04 2011 +0000
@@ -217,11 +217,11 @@
 		if (client_type) {
 			if (strcmp(client_type, "phone") == 0 ||
 				strcmp(client_type, "handheld") == 0) {
-				caps |= MSN_CLIENT_CAP_WIN_MOBILE;
+				caps |= MSN_CAP_VIA_MOBILE;
 			} else if (strcmp(client_type, "web") == 0) {
-				caps |= MSN_CLIENT_CAP_WEBMSGR;
+				caps |= MSN_CAP_VIA_WEBIM;
 			} else if (strcmp(client_type, "bot") == 0) {
-				caps |= MSN_CLIENT_CAP_BOT;
+				caps |= MSN_CAP_BOT;
 			}
 			/* MSN doesn't a "console" type...
 			 What, they have no ncurses UI? :-) */
--- a/libpurple/protocols/msn/switchboard.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/switchboard.c	Sun Mar 13 18:14:04 2011 +0000
@@ -265,12 +265,6 @@
 		return;
 	}
 
-	/* Don't add ourselves either... */
-	if (g_str_equal(passport, purple_account_get_username(account))) {
-		g_free(passport);
-		return;
-	}
-
 	if (!msnuser) {
 		purple_debug_info("msn","User %s is not on our list.\n", passport);
 		msnuser = msn_user_new(userlist, passport, NULL);
--- a/libpurple/protocols/msn/tlv.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/tlv.c	Sun Mar 13 18:14:04 2011 +0000
@@ -46,7 +46,7 @@
 }
 
 static GSList *
-msn_tlv_read(GSList *list, char *bs, size_t *bs_len)
+msn_tlv_read(GSList *list, const char *bs, size_t *bs_len)
 {
 	guint8 type, length;
 	msn_tlv_t *tlv;
@@ -76,7 +76,7 @@
 }
 
 GSList *
-msn_tlvlist_read(char *bs, size_t bs_len)
+msn_tlvlist_read(const char *bs, size_t bs_len)
 {
 	GSList *list = NULL;
 
@@ -302,10 +302,10 @@
 	}
 }
 
+int
+msn_tlvlist_write(char *bs, size_t bs_len, GSList *list)
+{
 #if 0
-int
-msn_tlvlist_write(ByteStream *bs, GSList **list)
-{
 	int goodbuflen;
 	GSList *cur;
 	msn_tlv_t *tlv;
@@ -325,9 +325,9 @@
 			byte_stream_putraw(bs, tlv->value, tlv->length);
 	}
 
-	return 1; /* TODO: This is a nonsensical return */
+#endif
+	return 0; /* TODO: This is a nonsensical return */
 }
-#endif
 
 msn_tlv_t *
 msn_tlv_gettlv(GSList *list, const guint16 type, const int nth)
--- a/libpurple/protocols/msn/tlv.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/tlv.h	Sun Mar 13 18:14:04 2011 +0000
@@ -46,13 +46,13 @@
 guint32 msn_tlv_get32(GSList *list, const guint16 type, const int nth);
 
 /* TLV list handling functions */
-GSList *msn_tlvlist_read(char *bs, size_t bs_len);
+GSList *msn_tlvlist_read(const char *bs, size_t bs_len);
 GSList *msn_tlvlist_copy(GSList *orig);
 
 int msn_tlvlist_count(GSList *list);
 size_t msn_tlvlist_size(GSList *list);
 gboolean msn_tlvlist_equal(GSList *one, GSList *two);
-int msn_tlvlist_write(char *bs, size_t bs_len, GSList **list);
+int msn_tlvlist_write(char *bs, size_t bs_len, GSList *list);
 void msn_tlvlist_free(GSList *list);
 
 int msn_tlvlist_add_raw(GSList **list, const guint16 type, const guint16 length, const char *value);
--- a/libpurple/protocols/msn/user.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/user.c	Sun Mar 13 18:14:04 2011 +0000
@@ -223,7 +223,10 @@
 {
 	g_return_val_if_fail(user != NULL, FALSE);
 
-	if (user->friendly_name && name && (!strcmp(user->friendly_name, name) ||
+	if (!name)
+		return FALSE;
+
+	if (user->friendly_name && (!strcmp(user->friendly_name, name) ||
 				!strcmp(user->passport, name)))
 		return FALSE;
 
--- a/libpurple/protocols/msn/user.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/user.h	Sun Mar 13 18:14:04 2011 +0000
@@ -28,13 +28,18 @@
 
 typedef enum
 {
-	MSN_NETWORK_UNKNOWN      = 0x00,
-	MSN_NETWORK_PASSPORT     = 0x01,
-	MSN_NETWORK_COMMUNICATOR = 0x02,
-	MSN_NETWORK_MOBILE       = 0x04,
-	MSN_NETWORK_MNI          = 0x08,
-	MSN_NETWORK_SMTP         = 0x10,
-	MSN_NETWORK_YAHOO        = 0x20
+	MSN_NETWORK_UNKNOWN      = 0,
+	MSN_NETWORK_PASSPORT     = 1,
+	MSN_NETWORK_COMMUNICATOR = 2,
+	MSN_NETWORK_MOBILE       = 4,
+	MSN_NETWORK_MNI          = 8,
+	MSN_NETWORK_CIRCLE       = 9,
+	MSN_NETWORK_TEMP_GROUP   = 10,
+	MSN_NETWORK_CID          = 11,
+	MSN_NETWORK_CONNECT      = 13,
+	MSN_NETWORK_REMOTE       = 14,
+	MSN_NETWORK_SMTP         = 16,
+	MSN_NETWORK_YAHOO        = 32
 } MsnNetwork;
 
 /**
@@ -144,7 +149,7 @@
  * @param passport     The initial passport.
  * @param stored_name  The initial stored name.
  *
- * @return A new user structure.
+ * @return A new user structure.  It will have a reference count of 1.
  */
 MsnUser *msn_user_new(MsnUserList *userlist, const char *passport,
 					  const char *friendly_name);
@@ -159,7 +164,8 @@
 MsnUser *msn_user_ref(MsnUser *user);
 
 /**
- * Decrement the reference count.
+ * Decrement the reference count.  When the count reaches 0 the object is
+ * automatically freed.
  *
  * @param user 	The user
  */
--- a/libpurple/protocols/msn/userlist.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/userlist.c	Sun Mar 13 18:14:04 2011 +0000
@@ -236,17 +236,18 @@
 }
 
 MsnUser *
-msn_userlist_find_add_user(MsnUserList *userlist,const char *passport,const char *userName)
+msn_userlist_find_add_user(MsnUserList *userlist, const char *passport, const char *friendly_name)
 {
 	MsnUser *user;
 
 	user = msn_userlist_find_user(userlist, passport);
 	if (user == NULL)
 	{
-		user = msn_user_new(userlist, passport, userName);
+		user = msn_user_new(userlist, passport, friendly_name);
 		msn_userlist_add_user(userlist, user);
+		msn_user_unref(user);
 	} else {
-		msn_user_set_friendly_name(user, userName);
+		msn_user_set_friendly_name(user, friendly_name);
 	}
 	return user;
 }
@@ -254,6 +255,7 @@
 void
 msn_userlist_add_user(MsnUserList *userlist, MsnUser *user)
 {
+	msn_user_ref(user);
 	userlist->users = g_list_prepend(userlist->users, user);
 }
 
@@ -261,6 +263,7 @@
 msn_userlist_remove_user(MsnUserList *userlist, MsnUser *user)
 {
 	userlist->users = g_list_remove(userlist->users, user);
+	msn_user_unref(user);
 }
 
 MsnUser *
@@ -287,7 +290,7 @@
 MsnUser *
 msn_userlist_find_user_with_id(MsnUserList *userlist, const char *uid)
 {
- 	GList *l;
+	GList *l;
 
 	g_return_val_if_fail(uid != NULL, NULL);
 
--- a/libpurple/protocols/msn/userlist.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/msn/userlist.h	Sun Mar 13 18:14:04 2011 +0000
@@ -73,7 +73,7 @@
 
 MsnUser * msn_userlist_find_user(MsnUserList *userlist, const char *passport);
 MsnUser * msn_userlist_find_add_user(MsnUserList *userlist,
-				const char *passport, const char *userName);
+				const char *passport, const char *friendly_name);
 MsnUser * msn_userlist_find_user_with_id(MsnUserList *userlist, const char *uid);
 MsnUser * msn_userlist_find_user_with_mobile_phone(MsnUserList *userlist, const char *number);
 
--- a/libpurple/protocols/mxit/Makefile.am	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -33,7 +33,9 @@
 	roster.c \
 	roster.h \
 	splashscreen.c \
-	splashscreen.h
+	splashscreen.h \
+	voicevideo.c \
+	voicevideo.h
 
 
 AM_CFLAGS = $(st)
--- a/libpurple/protocols/mxit/Makefile.mingw	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/Makefile.mingw	Sun Mar 13 18:14:04 2011 +0000
@@ -51,7 +51,8 @@
 			profile.c \
 			protocol.c \
 			roster.c \
-			splashscreen.c
+			splashscreen.c \
+			voicevideo.c
 
 OBJECTS = $(C_SRC:%.c=%.o)
 
--- a/libpurple/protocols/mxit/actions.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/actions.c	Sun Mar 13 18:14:04 2011 +0000
@@ -314,12 +314,11 @@
 {
 	char	version[256];
 
-	g_snprintf( version, sizeof( version ), "MXit libPurple Plugin v%s\n"
+	g_snprintf( version, sizeof( version ), 
 											"MXit Client Protocol v%i.%i\n\n"
 											"Author:\nPieter Loubser\n\n"
 											"Contributors:\nAndrew Victor\n\n"
 											"Testers:\nBraeme Le Roux\n\n",
-											MXIT_PLUGIN_VERSION,
 											( MXIT_CP_PROTO_VESION / 10 ), ( MXIT_CP_PROTO_VESION % 10 ) );
 
 	mxit_popup( PURPLE_NOTIFY_MSG_INFO, _( "About" ), version );
--- a/libpurple/protocols/mxit/chunk.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/chunk.c	Sun Mar 13 18:14:04 2011 +0000
@@ -406,10 +406,9 @@
  *  @param chunkdata		Chunked-data buffer
  *  @param mxitId			The username who's avatar to download
  *  @param avatarId			The Id of the avatar image (as string)
- *  @param imgsize			The resolution of the avatar image
  *  @return					The number of bytes encoded in the buffer
  */
-int mxit_chunk_create_get_avatar( char* chunkdata, const char* mxitId, const char* avatarId, unsigned int imgsize )
+int mxit_chunk_create_get_avatar( char* chunkdata, const char* mxitId, const char* avatarId )
 {
 	int			pos = 0;
 
@@ -432,7 +431,7 @@
 	pos += add_int16( &chunkdata[pos], 1 );
 
 	/* image size [4 bytes] */
-	pos += add_int32( &chunkdata[pos], imgsize );
+	pos += add_int32( &chunkdata[pos], MXIT_AVATAR_SIZE );
 
 	return pos;
 }
--- a/libpurple/protocols/mxit/chunk.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/chunk.h	Sun Mar 13 18:14:04 2011 +0000
@@ -152,7 +152,7 @@
 int mxit_chunk_create_get( char* chunkdata, const char* fileid, int filesize, int offset );
 int mxit_chunk_create_received( char* chunkdata, const char* fileid, unsigned char status );
 int mxit_chunk_create_set_avatar( char* chunkdata, const unsigned char* data, int datalen );
-int mxit_chunk_create_get_avatar( char* chunkdata, const char* mxitId, const char* avatarId, unsigned int imgsize );
+int mxit_chunk_create_get_avatar( char* chunkdata, const char* mxitId, const char* avatarId );
 
 /* Decode chunk */
 void mxit_chunk_parse_offer( char* chunkdata, int datalen, struct offerfile_chunk* offer );
--- a/libpurple/protocols/mxit/formcmds.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/formcmds.c	Sun Mar 13 18:14:04 2011 +0000
@@ -47,7 +47,11 @@
 	MXIT_CMD_REPLY,				/* Reply (reply) */
 	MXIT_CMD_PLATREQ,			/* Platform Request (platreq) */
 	MXIT_CMD_SELECTCONTACT,		/* Select Contact (selc) */
-	MXIT_CMD_IMAGE				/* Inline image (img) */
+	MXIT_CMD_IMAGE,				/* Inline image (img) */
+	MXIT_CMD_SCREENCONFIG,		/* Chat-screen config (csc) */
+	MXIT_CMD_SCREENINFO,		/* Chat-screen info (csi) */
+	MXIT_CMD_IMAGESTRIP,		/* Image Strip (is) */
+	MXIT_CMD_TABLE				/* Table (tbl) */
 } MXitCommandType;
 
 
@@ -87,7 +91,7 @@
 		goto done;
 	}
 
-	/* lets first see if we dont have the inline image already in cache */
+	/* lets first see if we don't have the inline image already in cache */
 	if (g_hash_table_lookup(iireq->mx->session->iimages, iireq->url)) {
 		/* inline image found in the cache, so we just ignore this reply */
 		goto done;
@@ -149,8 +153,16 @@
 			else if (strcmp(type, "selc") == 0)				/* select contact */
 				return MXIT_CMD_SELECTCONTACT;
 		}
-		else if (strcmp(op, "img") == 0)
-				return MXIT_CMD_IMAGE;
+		else if (strcmp(op, "img") == 0)					/* inline image */
+			return MXIT_CMD_IMAGE;
+		else if (strcmp(op, "csc") == 0)					/* chat-screen config */
+			return MXIT_CMD_SCREENCONFIG;
+		else if (strcmp(op, "csi") == 0)					/* chat-screen info */
+			return MXIT_CMD_SCREENINFO;
+		else if (strcmp(op, "is") == 0)						/* image-strip */
+			return MXIT_CMD_IMAGESTRIP;
+		else if (strcmp(op, "tbl") == 0)					/* table */
+			return MXIT_CMD_TABLE;
 	}
 
 	return MXIT_CMD_UNKNOWN;
@@ -333,7 +345,7 @@
 			g_string_append_printf(msg, "%s%s>", MXIT_II_TAG, iireq->url);
 			mx->got_img = TRUE;
 
-			/* lets first see if we dont have the inline image already in cache */
+			/* lets first see if we don't have the inline image already in cache */
 			if (g_hash_table_lookup(mx->session->iimages, iireq->url)) {
 				/* inline image found in the cache, so we do not have to request it from the web */
 				g_free(iireq);
--- a/libpurple/protocols/mxit/login.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/login.c	Sun Mar 13 18:14:04 2011 +0000
@@ -84,7 +84,7 @@
 	session->iimages = g_hash_table_new( g_str_hash, g_str_equal );
 	session->rx_state = RX_STATE_RLEN;
 	session->http_interval = MXIT_HTTP_POLL_MIN;
-	session->http_last_poll = time( NULL );
+	session->http_last_poll = mxit_now_milli();
 
 	return session;
 }
@@ -106,7 +106,7 @@
 	purple_connection_update_progress( session->con, _( "Logging In..." ), 2, 4 );
 
 	/* create a timer to send a ping packet if the connection is idle */
-	session->last_tx = time( NULL );
+	session->last_tx = mxit_now_milli();
 
 	/* encrypt the user password */
 	session->encpwd = mxit_encrypt_password( session );
@@ -141,9 +141,10 @@
 	}
 
 	/* This timer might already exist if we're registering a new account */
-	if ( session->q_timer == 0 )
+	if ( session->q_timer == 0 ) {
 		/* start the tx queue manager timer */
-		session->q_timer = purple_timeout_add_seconds( 2, mxit_manage_queue, session );
+		session->q_timer = purple_timeout_add_seconds( 2, mxit_manage_queue_slow, session );
+	}
 }
 
 
@@ -238,7 +239,7 @@
 	/* nickname */
 	str = purple_request_fields_get_string( fields, "nickname" );
 	if ( ( !str ) || ( strlen( str ) < 3 ) ) {
-		err = _( "The Display Name you entered is invalid." );
+		err = _( "The Display Name you entered is too short." );
 		goto out;
 	}
 	g_strlcpy( profile->nickname, str, sizeof( profile->nickname ) );
@@ -546,8 +547,8 @@
 	/* get state */
 	state = purple_account_get_int( session->acc, MXIT_CONFIG_STATE, MXIT_STATE_LOGIN );
 
-	url = g_strdup_printf( "%s?type=getpid&sessionid=%s&login=%s&ver=%s&clientid=%s&cat=%s&chalresp=%s&cc=%s&loc=%s&path=%i&brand=%s&model=%s&h=%i&w=%i&ts=%li",
-			session->logindata->wapserver, session->logindata->sessionid, purple_url_encode( session->acc->username ), MXIT_CP_RELEASE, MXIT_CLIENT_ID, MXIT_CP_ARCH,
+	url = g_strdup_printf( "%s?type=getpid&sessionid=%s&login=%s&ver=%i.%i.%i&clientid=%s&cat=%s&chalresp=%s&cc=%s&loc=%s&path=%i&brand=%s&model=%s&h=%i&w=%i&ts=%li",
+			session->logindata->wapserver, session->logindata->sessionid, purple_url_encode( session->acc->username ), PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_MICRO_VERSION, MXIT_CLIENT_ID, MXIT_CP_ARCH,
 			captcha_resp, session->logindata->cc, session->logindata->locale, ( state == MXIT_STATE_REGISTER1 ) ? 0 : 1, MXIT_CP_PLATFORM, MXIT_CP_OS,
 			MXIT_CAPTCHA_HEIGHT, MXIT_CAPTCHA_WIDTH, time( NULL ) );
 	url_data = purple_util_fetch_url_request( url, TRUE, MXIT_HTTP_USERAGENT, TRUE, NULL, FALSE, mxit_cb_clientinfo2, session );
@@ -762,6 +763,12 @@
 {
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_reconnect\n" );
 
+	/* remove the input cb function */
+	if ( session->con->inpa ) {
+		purple_input_remove( session->con->inpa );
+		session->con->inpa = 0;
+	}
+
 	/* close existing connection */
 	session->flags &= ~MXIT_FLAG_CONNECTED;
 	purple_proxy_connect_cancel_with_handle( session->con );
--- a/libpurple/protocols/mxit/mxit.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/mxit.c	Sun Mar 13 18:14:04 2011 +0000
@@ -37,6 +37,7 @@
 #include	"filexfer.h"
 #include	"actions.h"
 #include	"multimx.h"
+#include	"voicevideo.h"
 
 
 #ifdef	MXIT_LINK_CLICK
@@ -524,7 +525,7 @@
 	if ( session->http )
 		return;
 
-	if ( session->last_tx <= time( NULL ) - MXIT_PING_INTERVAL ) {
+	if ( session->last_tx <= ( mxit_now_milli() - ( MXIT_PING_INTERVAL * 1000 ) ) ) {
 		/*
 		 * this connection has been idle for too long, better ping
 		 * the server before it kills our connection.
@@ -559,6 +560,8 @@
  */
 static void mxit_get_info( PurpleConnection *gc, const char *who )
 {
+	PurpleBuddy*			buddy;
+	struct contact*			contact;
 	struct MXitSession*		session			= (struct MXitSession*) gc->proto_data;
 	const char*				profilelist[]	= { CP_PROFILE_BIRTHDATE, CP_PROFILE_GENDER, CP_PROFILE_FULLNAME,
 												CP_PROFILE_FIRSTNAME, CP_PROFILE_LASTNAME, CP_PROFILE_REGCOUNTRY, CP_PROFILE_LASTSEEN,
@@ -566,6 +569,22 @@
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_get_info: '%s'\n", who );
 
+	/* find the buddy information for this contact (reference: "libpurple/blist.h") */
+	buddy = purple_find_buddy( session->acc, who );
+	if ( !buddy ) {
+		purple_debug_warning( MXIT_PLUGIN_ID, "mxit_get_info: unable to find the buddy '%s'\n", who );
+		return;
+	}
+
+	contact = purple_buddy_get_protocol_data( buddy );
+	if ( !contact )
+		return;
+
+	/* only MXit users have profiles */
+	if ( contact->type != MXIT_TYPE_MXIT ) {
+		mxit_popup( PURPLE_NOTIFY_MSG_WARNING, _( "No profile available" ), _( "This contact does not have a profile." ) );
+		return;
+	}
 
 	/* send profile request */
 	mxit_send_extprofile_request( session, who, ARRAY_SIZE( profilelist ), profilelist );
@@ -588,7 +607,33 @@
 
 
 /*------------------------------------------------------------------------
- * Buddy list menu.
+ * Re-Invite was selected from the buddy-list menu.
+ *
+ *  @param node		The entry in the buddy list.
+ *  @param ignored	(not used)
+ */
+static void mxit_reinvite( PurpleBlistNode *node, gpointer ignored )
+{
+	PurpleBuddy*		buddy;
+	struct contact*		contact;
+	PurpleConnection*	gc;
+	struct MXitSession*	session;
+
+	buddy = (PurpleBuddy *)node;
+	gc = purple_account_get_connection( purple_buddy_get_account( buddy ) );
+	session = gc->proto_data;
+
+	contact = purple_buddy_get_protocol_data( (PurpleBuddy*) node );
+	if ( !contact )
+		return;
+
+	/* send a new invite */
+	mxit_send_invite( session, contact->username, contact->alias, contact->groupname );
+}
+
+
+/*------------------------------------------------------------------------
+ * Buddy-list menu.
  *
  *  @param node		The entry in the buddy list.
  */
@@ -597,6 +642,7 @@
 	PurpleBuddy*		buddy;
 	struct contact*		contact;
 	GList*				m = NULL;
+	PurpleMenuAction*	act;
 
 	if ( !PURPLE_BLIST_NODE_IS_BUDDY( node ) )
 		return NULL;
@@ -606,6 +652,12 @@
 	if ( !contact )
 		return NULL;
 
+	if ( ( contact->subtype == MXIT_SUBTYPE_DELETED ) || ( contact->subtype == MXIT_SUBTYPE_REJECTED ) || ( contact->subtype == MXIT_SUBTYPE_NONE ) ) {
+		/* contact is in Deleted, Rejected or None state */
+		act = purple_menu_action_new( _( "Re-Invite" ), PURPLE_CALLBACK( mxit_reinvite ), NULL, NULL );
+		m = g_list_append(m, act);
+	}
+
 	return m;
 }
 
@@ -686,8 +738,8 @@
 	NULL,					/* attention_types */
 	sizeof( PurplePluginProtocolInfo ),		/* struct_size */
 	mxit_get_text_table,	/* get_account_text_table */
-	NULL,					/* initiate_media */
-	NULL,					/* get_media_caps */
+	mxit_media_initiate,	/* initiate_media */
+	mxit_media_caps,		/* get_media_caps */
 	mxit_get_moods,			/* get_moods */
 	NULL,					/* set_public_alias */
 	NULL					/* get_public_alias */
@@ -706,7 +758,7 @@
 
 	MXIT_PLUGIN_ID,										/* plugin id (must be unique) */
 	MXIT_PLUGIN_NAME,									/* plugin name (this will be displayed in the UI) */
-	MXIT_PLUGIN_VERSION,								/* version of the plugin */
+	DISPLAY_VERSION,									/* version of the plugin */
 
 	MXIT_PLUGIN_SUMMARY,								/* short summary of the plugin */
 	MXIT_PLUGIN_DESC,									/* description of the plugin (can be long) */
--- a/libpurple/protocols/mxit/mxit.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/mxit.h	Sun Mar 13 18:14:04 2011 +0000
@@ -63,13 +63,12 @@
 /* Plugin details */
 #define		MXIT_PLUGIN_ID				"prpl-loubserp-mxit"
 #define		MXIT_PLUGIN_NAME			"MXit"
-#define		MXIT_PLUGIN_VERSION			"2.4.0"
 #define		MXIT_PLUGIN_EMAIL			"Pieter Loubser <libpurple@mxit.com>"
 #define		MXIT_PLUGIN_WWW				"http://www.mxit.com"
 #define		MXIT_PLUGIN_SUMMARY			"MXit Protocol Plugin"
 #define		MXIT_PLUGIN_DESC			"MXit"
 
-#define		MXIT_HTTP_USERAGENT			"libpurple-"MXIT_PLUGIN_VERSION
+#define		MXIT_HTTP_USERAGENT			"libpurple-"DISPLAY_VERSION
 
 
 /* default connection settings */
@@ -111,7 +110,6 @@
 /* define this to enable the link clicking support */
 #define		MXIT_LINK_CLICK
 
-
 #ifdef		MXIT_LINK_CLICK
 #define		MXIT_LINK_PREFIX			"gopher://"
 #define		MXIT_LINK_KEY				"MXIT"
@@ -137,10 +135,13 @@
 	unsigned int		http_seqno;					/* HTTP request sequence number */
 	guint				http_timer_id;				/* timer resource id (pidgin) */
 	int					http_interval;				/* poll inverval */
-	time_t				http_last_poll;				/* the last time a poll has been sent */
+	gint64				http_last_poll;				/* the last time a poll has been sent */
 	guint				http_handler;				/* HTTP connection handler */
 	void*				http_out_req;				/* HTTP outstanding request */
 
+	/* other servers */
+	char				voip_server[HOST_NAME_MAX];	/* voice/video server */
+
 	/* client */
 	struct login_data*	logindata;
 	char*				encpwd;						/* encrypted password */
@@ -159,7 +160,7 @@
 
 	/* transmit */
 	struct tx_queue		queue;						/* transmit packet queue (FIFO mode) */
-	time_t				last_tx;					/* timestamp of last packet sent */
+	gint64				last_tx;					/* timestamp of last packet sent */
 	int					outack;						/* outstanding ack packet */
 	guint				q_timer;					/* timer handler for managing queue */
 
@@ -169,7 +170,7 @@
 	unsigned int		rx_i;						/* receive buffer current index */
 	int					rx_res;						/* amount of bytes still outstanding for the current packet */
 	char				rx_state;					/* current receiver state */
-	time_t				last_rx;					/* timestamp of last packet received */
+	gint64				last_rx;					/* timestamp of last packet received */
 	GList*				active_chats;				/* list of all our contacts we received messages from (active chats) */
 
 	/* groupchat */
--- a/libpurple/protocols/mxit/profile.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/profile.c	Sun Mar 13 18:14:04 2011 +0000
@@ -108,10 +108,10 @@
  */
 static const char* datetime( gint64 msecs )
 {
-    time_t secs = msecs / 1000;
+	time_t secs = msecs / 1000;
 
-    struct tm t;
-    localtime_r( &secs, &t );
+	struct tm t;
+	localtime_r( &secs, &t );
 
 	return purple_utf8_strftime( "%d-%m-%Y %H:%M:%S", &t );
 }
@@ -140,13 +140,10 @@
 	purple_notify_user_info_add_pair( info, _( "Display Name" ), profile->nickname );
 	purple_notify_user_info_add_pair( info, _( "Birthday" ), profile->birthday );
 	purple_notify_user_info_add_pair( info, _( "Gender" ), profile->male ? _( "Male" ) : _( "Female" ) );
-//	purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 
 	/* optional information */
-//	purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 	purple_notify_user_info_add_pair( info, _( "First Name" ), profile->firstname );
 	purple_notify_user_info_add_pair( info, _( "Last Name" ), profile->lastname );
-//	purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 	purple_notify_user_info_add_pair( info, _( "Country" ), profile->regcountry );
 
 	purple_notify_user_info_add_section_break( info );
--- a/libpurple/protocols/mxit/protocol.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/protocol.c	Sun Mar 13 18:14:04 2011 +0000
@@ -37,6 +37,7 @@
 #include	"login.h"
 #include	"formcmds.h"
 #include	"http.h"
+#include	"voicevideo.h"
 
 
 #define		MXIT_MS_OFFSET		3
@@ -45,6 +46,18 @@
 #define		CP_REC_TERM			( ( session->http ) ? CP_HTTP_REC_TERM : CP_SOCK_REC_TERM )
 
 
+/*------------------------------------------------------------------------
+ * return the current timestamp in milliseconds
+ */
+gint64 mxit_now_milli( void )
+{
+	GTimeVal	now;
+
+	g_get_current_time( &now );
+
+	return ( ( now.tv_sec * 1000 ) + ( now.tv_usec / 1000 ) );
+}
+
 
 /*------------------------------------------------------------------------
  * Display a notification popup message to the user.
@@ -411,7 +424,7 @@
 	}
 
 	/* update the timestamp of the last-transmitted packet */
-	session->last_tx = time( NULL );
+	session->last_tx = mxit_now_milli();
 
 	/*
 	 * we need to remember that we are still waiting for the ACK from
@@ -474,17 +487,13 @@
 	packet->datalen = datalen;
 
 
-	/*
-	 * shortcut: first check if there are any commands still outstanding.
-	 * if not, then we might as well just write this packet directly and
-	 * skip the whole queueing thing
-	 */
-	if ( session->outack == 0 ) {
-		/* no outstanding ACKs, so we might as well write it directly */
+	/* shortcut */
+	if ( ( session->queue.count == 0 ) && ( session->outack == 0 ) ) {
+		/* the queue is empty and there are no outstanding acks so we can write it directly */
 		mxit_send_packet( session, packet );
 	}
 	else {
-		/* ACK still outstanding, so we need to queue this request until we have the ACK */
+		/* we need to queue this packet */
 
 		if ( ( packet->cmd == CP_CMD_PING ) || ( packet->cmd == CP_CMD_POLL ) ) {
 			/* we do NOT queue HTTP poll nor socket ping packets */
@@ -503,42 +512,89 @@
 
 
 /*------------------------------------------------------------------------
- * Callback to manage the packet send queue (send next packet, timeout's, etc).
+ * Manage the packet send queue (send next packet, timeout's, etc).
  *
  *  @param session		The MXit session object
  */
-gboolean mxit_manage_queue( gpointer user_data )
+static void mxit_manage_queue( struct MXitSession* session )
 {
-	struct MXitSession* session		= (struct MXitSession*) user_data;
 	struct tx_packet*	packet		= NULL;
+	gint64				now			= mxit_now_milli();
 
 	if ( !( session->flags & MXIT_FLAG_CONNECTED ) ) {
 		/* we are not connected, so ignore the queue */
-		return TRUE;
+		return;
 	}
 	else if ( session->outack > 0 ) {
 		/* we are still waiting for an outstanding ACK from the MXit server */
-		if ( session->last_tx <= time( NULL ) - MXIT_ACK_TIMEOUT ) {
+		if ( session->last_tx <= mxit_now_milli() - ( MXIT_ACK_TIMEOUT * 1000 ) ) {
 			/* ack timeout! so we close the connection here */
 			purple_debug_info( MXIT_PLUGIN_ID, "mxit_manage_queue: Timeout awaiting ACK for command '%i'\n", session->outack );
 			purple_connection_error( session->con, _( "Timeout while waiting for a response from the MXit server." ) );
 		}
-		return TRUE;
+		return;
+	}
+
+	/* 
+	 * the mxit server has flood detection and it prevents you from sending messages to fast.
+	 * this is a self defense mechanism, a very annoying feature. so the client must ensure that
+	 * it does not send messages too fast otherwise mxit will ignore the user for 30 seconds.
+	 * this is what we are trying to avoid here..
+	 */
+	if ( session->last_tx > ( now - MXIT_TX_DELAY ) ) {
+		/* we need to wait a little before sending the next packet, so schedule a wakeup call */
+		gint64 tdiff = now - ( session->last_tx );
+		guint delay = ( MXIT_TX_DELAY - tdiff ) + 9;
+		if ( delay <= 0 )
+			delay = MXIT_TX_DELAY;
+		purple_timeout_add( delay, mxit_manage_queue_fast, session );
+	}
+	else {
+		/* get the next packet from the queue to send */
+		packet = pop_tx_packet( session );
+		if ( packet != NULL ) {
+			/* there was a packet waiting to be sent to the server, now is the time to do something about it */
+
+			/* send the packet to MXit server */
+			mxit_send_packet( session, packet );
+		}
 	}
-
-	packet = pop_tx_packet( session );
-	if ( packet != NULL ) {
-		/* there was a packet waiting to be sent to the server, now is the time to do something about it */
-
-		/* send the packet to MXit server */
-		mxit_send_packet( session, packet );
-	}
-
+}
+
+
+/*------------------------------------------------------------------------
+ * Slow callback to manage the packet send queue.
+ *
+ *  @param session		The MXit session object
+ */
+gboolean mxit_manage_queue_slow( gpointer user_data )
+{
+	struct MXitSession* session		= (struct MXitSession*) user_data;
+
+	mxit_manage_queue( session );
+
+	/* continue running */
 	return TRUE;
 }
 
 
 /*------------------------------------------------------------------------
+ * Fast callback to manage the packet send queue.
+ *
+ *  @param session		The MXit session object
+ */
+gboolean mxit_manage_queue_fast( gpointer user_data )
+{
+	struct MXitSession* session		= (struct MXitSession*) user_data;
+
+	mxit_manage_queue( session );
+
+	/* stop running */
+	return FALSE;
+}
+
+
+/*------------------------------------------------------------------------
  * Callback to manage HTTP server polling (HTTP connections ONLY)
  *
  *  @param session		The MXit session object
@@ -547,9 +603,9 @@
 {
 	struct MXitSession* session		= (struct MXitSession*) user_data;
 	gboolean			poll		= FALSE;
-	time_t				now			= time( NULL );
+	gint64				now			= mxit_now_milli();
 	int					polldiff;
-	int					rxdiff;
+	gint64				rxdiff;
 
 	if ( !( session->flags & MXIT_FLAG_LOGGEDIN ) ) {
 		/* we only poll if we are actually logged in */
@@ -579,7 +635,7 @@
 
 	if ( poll ) {
 		/* send poll request */
-		session->http_last_poll = time( NULL );
+		session->http_last_poll = mxit_now_milli();
 		mxit_send_poll( session );
 	}
 
@@ -638,21 +694,36 @@
 	const char*			locale;
 	char				data[CP_MAX_PACKET];
 	int					datalen;
+	char*				clientVersion;
+	unsigned int		features	= MXIT_CP_FEATURES;
 
 	locale = purple_account_get_string( session->acc, MXIT_CONFIG_LOCALE, MXIT_DEFAULT_LOCALE );
 
+	/* Voice and Video supported */
+	if (mxit_audio_enabled() && mxit_video_enabled())
+		features |= (MXIT_CF_VOICE | MXIT_CF_VIDEO);
+	else if (mxit_audio_enabled())
+		features |= MXIT_CF_VOICE;
+
+	/* generate client version string (eg, P-2.7.10-Y-PURPLE) */
+	clientVersion = g_strdup_printf( "%c-%i.%i.%i-%s-%s", MXIT_CP_DISTCODE, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_MICRO_VERSION, MXIT_CP_ARCH, MXIT_CP_PLATFORM );
+
 	/* convert the packet to a byte stream */
 	datalen = snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i%c%s%c"		/* "ms"=password\1version\1maxreplyLen\1name\1 */
 								"%s%c%i%c%s%c%s%c"			/* dateOfBirth\1gender\1location\1capabilities\1 */
-								"%s%c%i%c%s%c%s",			/* dc\1features\1dialingcode\1locale */
-								session->encpwd, CP_FLD_TERM, MXIT_CP_VERSION, CP_FLD_TERM, CP_MAX_FILESIZE, CP_FLD_TERM, profile->nickname, CP_FLD_TERM,
+								"%s%c%i%c%s%c%s"			/* dc\1features\1dialingcode\1locale */
+								"%c%i%c%i",					/* \1protocolVer\1lastRosterUpdate */	
+								session->encpwd, CP_FLD_TERM, clientVersion, CP_FLD_TERM, CP_MAX_FILESIZE, CP_FLD_TERM, profile->nickname, CP_FLD_TERM,
 								profile->birthday, CP_FLD_TERM, ( profile->male ) ? 1 : 0, CP_FLD_TERM, MXIT_DEFAULT_LOC, CP_FLD_TERM, MXIT_CP_CAP, CP_FLD_TERM,
-								session->distcode, CP_FLD_TERM, MXIT_CP_FEATURES, CP_FLD_TERM, session->dialcode, CP_FLD_TERM, locale
+								session->distcode, CP_FLD_TERM, features, CP_FLD_TERM, session->dialcode, CP_FLD_TERM, locale,
+								CP_FLD_TERM, MXIT_CP_PROTO_VESION, CP_FLD_TERM, 0
 	);
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_REGISTER );
+
+	g_free( clientVersion );
 }
 
 
@@ -663,21 +734,32 @@
  */
 void mxit_send_login( struct MXitSession* session )
 {
-	const char*	splashId;
-	const char*	locale;
-	char		data[CP_MAX_PACKET];
-	int			datalen;
+	const char*		splashId;
+	const char*		locale;
+	char			data[CP_MAX_PACKET];
+	int				datalen;
+	char*			clientVersion;
+	unsigned int	features	= MXIT_CP_FEATURES;
 
 	locale = purple_account_get_string( session->acc, MXIT_CONFIG_LOCALE, MXIT_DEFAULT_LOCALE );
 
+	/* Voice and Video supported */
+	if (mxit_audio_enabled() && mxit_video_enabled())
+		features |= (MXIT_CF_VOICE | MXIT_CF_VIDEO);
+	else if (mxit_audio_enabled())
+		features |= MXIT_CF_VOICE;
+
+	/* generate client version string (eg, P-2.7.10-Y-PURPLE) */
+	clientVersion = g_strdup_printf( "%c-%i.%i.%i-%s-%s", MXIT_CP_DISTCODE, PURPLE_MAJOR_VERSION, PURPLE_MINOR_VERSION, PURPLE_MICRO_VERSION, MXIT_CP_ARCH, MXIT_CP_PLATFORM );
+
 	/* convert the packet to a byte stream */
 	datalen = snprintf( data, sizeof( data ),
 								"ms=%s%c%s%c%i%c"			/* "ms"=password\1version\1getContacts\1 */
 								"%s%c%s%c%i%c"				/* capabilities\1dc\1features\1 */
 								"%s%c%s%c"					/* dialingcode\1locale\1 */
 								"%i%c%i%c%i",				/* maxReplyLen\1protocolVer\1lastRosterUpdate */
-								session->encpwd, CP_FLD_TERM, MXIT_CP_VERSION, CP_FLD_TERM, 1, CP_FLD_TERM,
-								MXIT_CP_CAP, CP_FLD_TERM, session->distcode, CP_FLD_TERM, MXIT_CP_FEATURES, CP_FLD_TERM,
+								session->encpwd, CP_FLD_TERM, clientVersion, CP_FLD_TERM, 1, CP_FLD_TERM,
+								MXIT_CP_CAP, CP_FLD_TERM, session->distcode, CP_FLD_TERM, features, CP_FLD_TERM,
 								session->dialcode, CP_FLD_TERM, locale, CP_FLD_TERM,
 								CP_MAX_FILESIZE, CP_FLD_TERM, MXIT_CP_PROTO_VESION, CP_FLD_TERM, 0
 	);
@@ -689,6 +771,8 @@
 
 	/* queue packet for transmission */
 	mxit_queue_packet( session, data, datalen, CP_CMD_LOGIN );
+
+	g_free( clientVersion );
 }
 
 
@@ -732,7 +816,7 @@
  *  @param session		The MXit session object
  *  @param username		Username who's profile is being requested (NULL = our own)
  *  @param nr_attribs	Number of attributes being requested
- *  @param attributes	The names of the attributes
+ *  @param attribute	The names of the attributes
  */
 void mxit_send_extprofile_request( struct MXitSession* session, const char* username, unsigned int nr_attrib, const char* attribute[] )
 {
@@ -742,7 +826,8 @@
 
 	datalen = snprintf( data, sizeof( data ),
 								"ms=%s%c%i",		/* "ms="mxitid\1nr_attributes */
-								(username ? username : ""), CP_FLD_TERM, nr_attrib);
+								( username ? username : "" ), CP_FLD_TERM, nr_attrib
+	);
 
 	/* add attributes */
 	for ( i = 0; i < nr_attrib; i++ )
@@ -790,6 +875,63 @@
 
 
 /*------------------------------------------------------------------------
+ * Send packet to request list of suggested friends.
+ *
+ *  @param session		The MXit session object
+ *  @param max			Maximum number of results to return
+ *  @param nr_attribs	Number of attributes being requested
+ *  @param attribute	The names of the attributes  
+ */
+void mxit_send_suggest_friends( struct MXitSession* session, int max, unsigned int nr_attrib, const char* attribute[] )
+{
+	char			data[CP_MAX_PACKET];
+	int				datalen;
+	unsigned int	i;
+
+	/* convert the packet to a byte stream */
+	datalen = snprintf( data, sizeof( data ),
+								"ms=%i%c%s%c%i%c%i",		/* inputType \1 input \ 1 maxSuggestions \1 numAttributes \1 name0 ... \1 nameN */
+								CP_SUGGEST_FRIENDS, CP_FLD_TERM, "", CP_FLD_TERM, max, CP_FLD_TERM, nr_attrib );
+
+	/* add attributes */
+	for ( i = 0; i < nr_attrib; i++ )
+		datalen += sprintf(	data + datalen, "%c%s", CP_FLD_TERM, attribute[i] );
+
+	/* queue packet for transmission */
+	mxit_queue_packet( session, data, datalen, CP_CMD_SUGGESTCONTACTS );
+}
+
+
+/*------------------------------------------------------------------------
+ * Send packet to perform a search for users.
+ *
+ *  @param session		The MXit session object
+ *  @param max			Maximum number of results to return
+ *  @param text			The search text
+ *  @param nr_attribs	Number of attributes being requested
+ *  @param attribute	The names of the attributes
+ */
+void mxit_send_suggest_search( struct MXitSession* session, int max, const char* text, unsigned int nr_attrib, const char* attribute[] )
+{
+	char			data[CP_MAX_PACKET];
+	int				datalen;
+	unsigned int	i;
+
+	/* convert the packet to a byte stream */
+	datalen = snprintf( data, sizeof( data ),
+								"ms=%i%c%s%c%i%c%i",		/* inputType \1 input \ 1 maxSuggestions \1 numAttributes \1 name0 ... \1 nameN */
+								CP_SUGGEST_SEARCH, CP_FLD_TERM, text, CP_FLD_TERM, max, CP_FLD_TERM, nr_attrib );
+
+	/* add attributes */
+	for ( i = 0; i < nr_attrib; i++ )
+		datalen += sprintf(	data + datalen, "%c%s", CP_FLD_TERM, attribute[i] );
+
+	/* queue packet for transmission */
+	mxit_queue_packet( session, data, datalen, CP_CMD_SUGGESTCONTACTS );
+}
+
+
+/*------------------------------------------------------------------------
  * Send a presence update packet to the MXit server.
  *
  *  @param session		The MXit session object
@@ -1039,7 +1181,6 @@
  *  @param nr_usernames	Number of users being invited
  *  @param usernames	The usernames of the users being invited
  */
-
 void mxit_send_groupchat_invite( struct MXitSession* session, const char* roomid, int nr_usernames, const char* usernames[] )
 {
 	char		data[CP_MAX_PACKET];
@@ -1271,7 +1412,7 @@
 	/* map chunk header over data buffer */
 	chunk = &data[datalen];
 
-	size = mxit_chunk_create_get_avatar( chunk_data(chunk), mxitId, avatarId, MXIT_AVATAR_SIZE );
+	size = mxit_chunk_create_get_avatar( chunk_data(chunk), mxitId, avatarId );
 	if ( size < 0 ) {
 		purple_debug_error( MXIT_PLUGIN_ID, "Error creating get avatar chunk (%i)\n", size );
 		return;
@@ -1322,6 +1463,10 @@
 	if ( records[1]->fcount >= 9 )
 		session->uid = g_strdup( records[1]->fields[8]->data );
 
+	/* extract VoIP server (from protocol 6.2) */
+	if ( records[1]->fcount >= 11 )
+		g_strlcpy( session->voip_server, records[1]->fields[10]->data, sizeof( session->voip_server ) );
+
 	/* display the current splash-screen */
 	if ( splash_popup_enabled( session ) )
 		splash_display( session );
@@ -1567,13 +1712,13 @@
  */
 static void mxit_parse_cmd_presence( struct MXitSession* session, struct record** records, int rcount )
 {
-	struct record*		rec;
 	int					i;
 
 	purple_debug_info( MXIT_PLUGIN_ID, "mxit_parse_cmd_presence (%i recs)\n", rcount );
 
 	for ( i = 0; i < rcount; i++ ) {
-		rec = records[i];
+		struct record*	rec		= records[i];
+		int				flags	= 0;
 
 		if ( rec->fcount < 6 ) {
 			purple_debug_error( MXIT_PLUGIN_ID, "BAD PRESENCE RECORD! %i fields\n", rec->fcount );
@@ -1582,12 +1727,15 @@
 
 		/*
 		 * The format of the record is:
-		 * contactAddressN\1presenceN\1moodN\1customMoodN\1statusMsgN\1avatarIdN
+		 * contactAddressN \1 presenceN \1 moodN \1 customMoodN \1 statusMsgN \1 avatarIdN [ \1 flagsN ]
 		 */
 		mxit_strip_domain( rec->fields[0]->data );		/* contactAddress */
 
+		if ( rec->fcount >= 7 )		/* flags field is included */
+			flags = atoi( rec->fields[6]->data );
+
 		mxit_update_buddy_presence( session, rec->fields[0]->data, atoi( rec->fields[1]->data ), atoi( rec->fields[2]->data ),
-				rec->fields[3]->data, rec->fields[4]->data );
+				rec->fields[3]->data, rec->fields[4]->data, flags );
 		mxit_update_buddy_avatar( session, rec->fields[0]->data, rec->fields[5]->data );
 	}
 }
@@ -1908,7 +2056,7 @@
 {
 	/* ignore ping/poll packets */
 	if ( ( packet->cmd != CP_CMD_PING ) && ( packet->cmd != CP_CMD_POLL ) )
-		session->last_rx = time( NULL );
+		session->last_rx = mxit_now_milli();
 
 	/*
 	 * when we pass the packet records to the next level for parsing
--- a/libpurple/protocols/mxit/protocol.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/protocol.h	Sun Mar 13 18:14:04 2011 +0000
@@ -75,6 +75,8 @@
 #define		MXIT_CF_NO_AVATARS		0x200000
 #define		MXIT_CF_GAMING			0x400000
 #define		MXIT_CF_GAMING_UPDATE	0x800000
+#define		MXIT_CF_VOICE			0x1000000
+#define		MXIT_CF_VIDEO			0x2000000
 
 /* Client features supported by this implementation */
 #define		MXIT_CP_FEATURES		( MXIT_CF_FILE_TRANSFER | MXIT_CF_FILE_ACCESS | MXIT_CF_AUDIO | MXIT_CF_MARKUP | MXIT_CF_EXT_MARKUP | MXIT_CF_NO_GATEWAYS | MXIT_CF_IMAGES | MXIT_CF_COMMANDS | MXIT_CF_VIBES | MXIT_CF_MIDP2 )
@@ -82,14 +84,13 @@
 
 #define		MXIT_PING_INTERVAL		( 5 * 60 )				/* ping the server after X seconds of being idle (5 minutes) */
 #define		MXIT_ACK_TIMEOUT		( 30 )					/* timeout after waiting X seconds for an ack from the server (30 seconds) */
+#define		MXIT_TX_DELAY			( 100 )					/* delay between sending consecutive packets (100 ms) */
 
 /* MXit client version */
-#define		MXIT_CP_DISTCODE		"P"						/* client distribution code (magic, do not touch!) */
-#define		MXIT_CP_RELEASE			"5.9.0"					/* client version */
+#define		MXIT_CP_DISTCODE		'P'						/* client distribution code (magic, do not touch!) */
 #define		MXIT_CP_ARCH			"Y"						/* client architecture series (Y not for Yoda but for PC-client) */
 #define		MXIT_CLIENT_ID			"LP"					/* client ID as specified by MXit */
 #define		MXIT_CP_PLATFORM		"PURPLE"				/* client platform */
-#define		MXIT_CP_VERSION			MXIT_CP_DISTCODE"-"MXIT_CP_RELEASE"-"MXIT_CP_ARCH"-"MXIT_CP_PLATFORM
 #define		MXIT_CP_PROTO_VESION	60						/* client protocol version */
 
 /* set operating system name */
@@ -107,7 +108,7 @@
 #define		MXIT_CP_CAP				"utf8=true;cid="MXIT_CLIENT_ID
 
 /* Client settings */
-#define		MAX_QUEUE_SIZE			( 1 << 4 )				/* tx queue size (16 packets) */
+#define		MAX_QUEUE_SIZE			( 1 << 5 )				/* tx queue size (32 packets) */
 #define		MXIT_POPUP_WIN_NAME		"MXit Notification"		/* popup window name */
 #define		MXIT_MAX_ATTRIBS		10						/* maximum profile attributes supported */
 #define		MXIT_DEFAULT_LOCALE		"en"					/* default locale setting */
@@ -125,6 +126,7 @@
 #define		CP_CMD_TX_MSG			0x000A					/* (10) send new message */
 #define		CP_CMD_REGISTER			0x000B					/* (11) register */
 //#define	CP_CMD_PROFILE_SET		0x000C					/* (12) set profile (DEPRECATED see CP_CMD_EXTPROFILE_SET) */
+#define		CP_CMD_SUGGESTCONTACTS	0x000D					/* (13) suggest contacts */
 #define		CP_CMD_POLL				0x0011					/* (17) poll the HTTP server for an update */
 //#define	CP_CMD_PROFILE_GET		0x001A					/* (26) get profile (DEPRECATED see CP_CMD_EXTPROFILE_GET) */
 #define		CP_CMD_MEDIA			0x001B					/* (27) get multimedia message */
@@ -202,6 +204,12 @@
 /* profile flags */
 #define		CP_PROF_DOBLOCKED		0x40					/* date-of-birth cannot be changed */
 
+/* suggestion types */
+#define		CP_SUGGEST_ADDRESSBOOK	0						/* address book search */
+#define		CP_SUGGEST_FRIENDS		1						/* suggested friends */
+#define		CP_SUGGEST_SEARCH		2						/* free-text search */
+#define		CP_SUGGEST_MXITID		3						/* MXitId search */
+
 /* define this to enable protocol debugging (very verbose logging) */
 #define		DEBUG_PROTOCOL
 
@@ -277,7 +285,8 @@
 gboolean find_active_chat( const GList* chats, const char* who );
 
 void mxit_cb_rx( gpointer data, gint source, PurpleInputCondition cond );
-gboolean mxit_manage_queue( gpointer user_data );
+gboolean mxit_manage_queue_slow( gpointer user_data );
+gboolean mxit_manage_queue_fast( gpointer user_data );
 gboolean mxit_manage_polling( gpointer user_data );
 
 void mxit_send_register( struct MXitSession* session );
@@ -293,6 +302,9 @@
 void mxit_send_extprofile_update( struct MXitSession* session, const char* password, unsigned int nr_attrib, const char* attributes );
 void mxit_send_extprofile_request( struct MXitSession* session, const char* username, unsigned int nr_attrib, const char* attribute[] );
 
+void mxit_send_suggest_friends( struct MXitSession* session, int max, unsigned int nr_attrib, const char* attribute[] );
+void mxit_send_suggest_search( struct MXitSession* session, int max, const char* text, unsigned int nr_attrib, const char* attribute[] );
+
 void mxit_send_invite( struct MXitSession* session, const char* username, const char* alias, const char* groupname );
 void mxit_send_remove( struct MXitSession* session, const char* username );
 void mxit_send_allow_sub( struct MXitSession* session, const char* username, const char* alias );
@@ -314,6 +326,7 @@
 int mxit_parse_packet( struct MXitSession* session );
 void dump_bytes( struct MXitSession* session, const char* buf, int len );
 void mxit_close_connection( struct MXitSession* session );
+gint64 mxit_now_milli( void );
 
 
 #endif		/* _MXIT_PROTO_H_ */
--- a/libpurple/protocols/mxit/roster.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/roster.c	Sun Mar 13 18:14:04 2011 +0000
@@ -443,8 +443,9 @@
  *  @param mood			The new mood for the contact
  *  @param customMood	The custom mood identifier
  *  @param statusMsg	This is the contact's status message
+ *  @param flags		The contact's presence flags.
  */
-void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg )
+void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg, int flags )
 {
 	PurpleBuddy*		buddy	= NULL;
 	struct contact*		contact	= NULL;
@@ -470,6 +471,7 @@
 
 	contact->presence = presence;
 	contact->mood = mood;
+	contact->capabilities = flags;
 
 	/* validate mood */
 	if (( contact->mood < MXIT_MOOD_NONE ) || ( contact->mood > MXIT_MOOD_STRESSED ))
--- a/libpurple/protocols/mxit/roster.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/mxit/roster.h	Sun Mar 13 18:14:04 2011 +0000
@@ -79,6 +79,11 @@
 #define		MXIT_CFLAG_FOCUS_SEND_BLANK	0x20000
 
 
+/* MXit presence flags */
+#define		MXIT_PFLAG_VOICE			0x1
+#define		MXIT_PFLAG_VIDEO			0x2
+
+
 /* Subscription types */
 #define		MXIT_SUBTYPE_BOTH			'B'
 #define		MXIT_SUBTYPE_PENDING		'P'
@@ -108,6 +113,7 @@
 	short		mood;								/* contact current mood */
 	int			flags;								/* contact flags */
 	short		presence;							/* presence state */
+	int			capabilities;						/* contact capabilities */
 	short		subtype;							/* subscription type */
 
 	char*		msg;								/* invite/rejection message */
@@ -129,7 +135,7 @@
 
 /* MXit Protocol callbacks */
 void mxit_update_contact( struct MXitSession* session, struct contact* contact );
-void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg );
+void mxit_update_buddy_presence( struct MXitSession* session, const char* username, short presence, short mood, const char* customMood, const char* statusMsg, int flags );
 void mxit_update_buddy_avatar( struct MXitSession* session, const char* username, const char* avatarId );
 void mxit_new_subscription( struct MXitSession* session, struct contact* contact );
 void mxit_update_blist( struct MXitSession* session );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/mxit/voicevideo.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,154 @@
+/*
+ *					MXit Protocol libPurple Plugin
+ *
+ *						-- voice & video --
+ *
+ *				Andrew Victor	<libpurple@mxit.com>
+ *
+ *			(C) Copyright 2010	MXit Lifestyle (Pty) Ltd.
+ *				<http://www.mxitlifestyle.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#include "purple.h"
+#include "mxit.h"
+#include "roster.h"
+#include "voicevideo.h"
+
+#if defined(USE_VV) && defined(MXIT_DEV_VV)
+
+#warning "MXit VV support enabled."
+
+/*------------------------------------------------------------------------
+ * Does this client support Voice?
+ */
+gboolean mxit_audio_enabled(void)
+{
+    PurpleMediaManager *manager = purple_media_manager_get();
+    PurpleMediaCaps caps = purple_media_manager_get_ui_caps(manager);
+
+    return (caps & PURPLE_MEDIA_CAPS_AUDIO);
+}
+
+/*------------------------------------------------------------------------
+ * Does this client support Voice and Video?
+ */
+gboolean mxit_video_enabled(void)
+{
+    PurpleMediaManager *manager = purple_media_manager_get();
+    PurpleMediaCaps caps = purple_media_manager_get_ui_caps(manager);
+
+    return (caps & PURPLE_MEDIA_CAPS_VIDEO);
+}
+
+/*------------------------------------------------------------------------
+ * Return the list of media capabilities this contact supports.
+ *
+ *  @param account		The MXit account object
+ *  @param who			The username of the contact.
+ *  @return				The media capabilities supported
+ */
+PurpleMediaCaps mxit_media_caps(PurpleAccount *account, const char *who)
+{
+	struct MXitSession*	session	= purple_account_get_connection(account)->proto_data;
+	PurpleBuddy*		buddy;
+	struct contact*		contact;
+	PurpleMediaCaps		capa	= PURPLE_MEDIA_CAPS_NONE;
+
+	purple_debug_info(MXIT_PLUGIN_ID, "mxit_media_caps: buddy '%s'\n", who);
+
+	/* We need to have a voice/video server */
+	if (strlen(session->voip_server) == 0)
+		return PURPLE_MEDIA_CAPS_NONE;
+
+	/* find the buddy information for this contact (reference: "libpurple/blist.h") */
+	buddy = purple_find_buddy(account, who);
+	if (!buddy) {
+		purple_debug_warning(MXIT_PLUGIN_ID, "mxit_media_caps: unable to find the buddy '%s'\n", who);
+		return PURPLE_MEDIA_CAPS_NONE;
+	}
+
+	contact = purple_buddy_get_protocol_data(buddy);
+	if (!contact)
+		return PURPLE_MEDIA_CAPS_NONE;
+
+	/* can only communicate with MXit users */
+	if (contact->type != MXIT_TYPE_MXIT)
+		return PURPLE_MEDIA_CAPS_NONE;
+
+	/* and only with contacts in the 'Both' subscription state */
+	if (contact->subtype != MXIT_SUBTYPE_BOTH)
+		return PURPLE_MEDIA_CAPS_NONE;
+
+	/* and only when they're online */
+	if (contact->presence == MXIT_PRESENCE_OFFLINE)
+		return MXIT_PRESENCE_OFFLINE;
+
+	/* they support voice-only */
+	if (contact->capabilities & MXIT_PFLAG_VOICE)
+		capa |= PURPLE_MEDIA_CAPS_AUDIO;
+
+	/* they support voice-and-video */
+	if (contact->capabilities & MXIT_PFLAG_VIDEO)
+		capa |= (PURPLE_MEDIA_CAPS_AUDIO | PURPLE_MEDIA_CAPS_VIDEO | PURPLE_MEDIA_CAPS_AUDIO_VIDEO);
+
+	return capa;
+}
+
+
+/*------------------------------------------------------------------------
+ * Initiate a voice/video session with a contact.
+ *
+ *  @param account		The MXit account object
+ *  @param who			The username of the contact.
+ *  @param type			The type of media session to initiate
+ *  @return				TRUE if session was initiated
+ */
+gboolean mxit_media_initiate(PurpleAccount *account, const char *who, PurpleMediaSessionType type)
+{
+	purple_debug_info(MXIT_PLUGIN_ID, "mxit_media_initiate: buddy '%s'\n", who);
+
+	return FALSE;
+}
+
+#else
+
+/*
+ * Voice and Video not supported.
+ */
+
+gboolean mxit_audio_enabled(void)
+{
+    return FALSE;
+}
+
+gboolean mxit_video_enabled(void)
+{
+	return FALSE;
+}
+
+PurpleMediaCaps mxit_media_caps(PurpleAccount *account, const char *who)
+{
+	return PURPLE_MEDIA_CAPS_NONE;
+}
+
+gboolean mxit_media_initiate(PurpleAccount *account, const char *who, PurpleMediaSessionType type)
+{
+	return FALSE;
+}
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/protocols/mxit/voicevideo.h	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,41 @@
+/*
+ *					MXit Protocol libPurple Plugin
+ *
+ *						-- voice & video --
+ *
+ *				Andrew Victor	<libpurple@mxit.com>
+ *
+ *			(C) Copyright 2010	MXit Lifestyle (Pty) Ltd.
+ *				<http://www.mxitlifestyle.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
+ */
+
+#ifndef		_MXIT_VOICEVICEO_H_
+#define		_MXIT_VOICEVIDEO_H_
+
+#include	"media.h"
+
+
+#undef		MXIT_DEV_VV
+
+
+gboolean mxit_audio_enabled(void);
+gboolean mxit_video_enabled(void);
+PurpleMediaCaps mxit_media_caps(PurpleAccount* account, const char* who);
+gboolean mxit_media_initiate(PurpleAccount* account, const char* who, PurpleMediaSessionType type);
+
+
+#endif		/* _MXIT_VOICEVIDEO_H_ */
--- a/libpurple/protocols/myspace/myspace.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Sun Mar 13 18:14:04 2011 +0000
@@ -385,21 +385,22 @@
 
 	g_return_val_if_fail(buddy != NULL, NULL);
 
-	user = msim_get_user_from_buddy(buddy, TRUE);
-
 	account = purple_buddy_get_account(buddy);
 	gc = purple_account_get_connection(account);
 	session = (MsimSession *)gc->proto_data;
 
 	display_name = headline = NULL;
 
-	/* Retrieve display name and/or headline, depending on user preference. */
-	if (purple_account_get_bool(session->account, "show_headline", TRUE)) {
-		headline = user->headline;
-	}
-
-	if (purple_account_get_bool(session->account, "show_display_name", FALSE)) {
-		display_name = user->display_name;
+	user = msim_get_user_from_buddy(buddy, FALSE);
+	if (user != NULL) {
+		/* Retrieve display name and/or headline, depending on user preference. */
+		if (purple_account_get_bool(account, "show_headline", TRUE)) {
+			headline = user->headline;
+		}
+
+		if (purple_account_get_bool(account, "show_display_name", FALSE)) {
+			display_name = user->display_name;
+		}
 	}
 
 	/* Return appropriate combination of display name and/or headline, or neither. */
--- a/libpurple/protocols/oscar/family_feedbag.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/oscar/family_feedbag.c	Sun Mar 13 18:14:04 2011 +0000
@@ -824,7 +824,7 @@
 		return -EINVAL;
 
 	if (aim_ssi_itemlist_find(od->ssi.local, 0x0000, 0x0000) == NULL)
-		aim_ssi_itemlist_add(&od->ssi.local, NULL, 0x0000, 0x0000, list_type, NULL);
+		aim_ssi_itemlist_add(&od->ssi.local, NULL, 0x0000, 0x0000, AIM_SSI_TYPE_GROUP, NULL);
 
 	aim_ssi_itemlist_add(&od->ssi.local, name, 0x0000, 0xFFFF, list_type, NULL);
 	return aim_ssi_sync(od);
--- a/libpurple/protocols/oscar/flap_connection.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/oscar/flap_connection.c	Sun Mar 13 18:14:04 2011 +0000
@@ -208,7 +208,7 @@
  * @param data The optional bytestream that makes up the data portion
  *        of this SNAC.  For empty SNACs this should be NULL.
  * @param high_priority If TRUE, the SNAC will be queued normally if
- *        needed. If FALSE, it wil be queued separately, to be sent
+ *        needed. If FALSE, it will be queued separately, to be sent
  *        only if all high priority SNACs have been sent.
  */
 void
--- a/libpurple/protocols/oscar/oscar.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sun Mar 13 18:14:04 2011 +0000
@@ -2828,6 +2828,52 @@
 	return 1;
 }
 
+static void oscar_format_username(PurpleConnection *gc, const char *new_display_name)
+{
+	OscarData *od;
+	const char *old_display_name, *username;
+	char *tmp, *at_sign;
+
+	old_display_name = purple_connection_get_display_name(gc);
+	if (old_display_name && strchr(old_display_name, '@')) {
+		purple_debug_info("oscar", "Cowardly refusing to attempt to format "
+				"screen name because the current formatting according to "
+				"the server (%s) appears to be an email address\n",
+				old_display_name);
+		return;
+	}
+
+	username = purple_account_get_username(purple_connection_get_account(gc));
+	if (oscar_util_name_compare(username, new_display_name)) {
+		purple_notify_error(gc, NULL, _("The new formatting is invalid."),
+						  _("Username formatting can change only capitalization and whitespace."));
+		return;
+	}
+
+	tmp = g_strdup(new_display_name);
+
+	/*
+	 * If our local username is an email address then strip off the domain.
+	 * This allows formatting to work if the user entered their username as
+	 * 'something@aim.com' or possibly other AOL-owned domains.
+	 */
+	at_sign = strchr(tmp, '@');
+	if (at_sign)
+		at_sign[0] = '\0';
+
+	od = purple_connection_get_protocol_data(gc);
+	if (!flap_connection_getbytype(od, SNAC_FAMILY_ADMIN)) {
+		/* We don't have a connection to an "admin" server.  Make one. */
+		od->setnick = TRUE;
+		g_free(od->newformatting);
+		od->newformatting = tmp;
+		aim_srv_requestnew(od, SNAC_FAMILY_ADMIN);
+	} else {
+		aim_admin_setnick(od, flap_connection_getbytype(od, SNAC_FAMILY_ADMIN), tmp);
+		g_free(tmp);
+	}
+}
+
 static int purple_bosrights(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) {
 	PurpleConnection *gc;
 	PurpleAccount *account;
@@ -2860,12 +2906,13 @@
 		serv_set_info(gc, purple_account_get_user_info(account));
 
 	username = purple_account_get_username(account);
-	if (!od->icq && strcmp(username, purple_connection_get_display_name(gc)) != 0)
+	if (!od->icq && strcmp(username, purple_connection_get_display_name(gc)) != 0) {
 		/*
 		 * Format the username for AIM accounts if it's different
 		 * than what's currently set.
 		 */
 		oscar_format_username(gc, username);
+	}
 
 	/* Set our available message based on the current status */
 	status = purple_account_get_active_status(account);
@@ -3093,12 +3140,12 @@
 oscar_keepalive(PurpleConnection *gc)
 {
 	OscarData *od;
-	FlapConnection *conn;
+	GSList *l;
 
 	od = purple_connection_get_protocol_data(gc);
-	conn = flap_connection_getbytype(od, SNAC_FAMILY_LOCATE);
-	if (conn != NULL)
-		flap_connection_send_keepalive(od, conn);
+	for (l = od->oscar_connections; l; l = l->next) {
+		flap_connection_send_keepalive(od, l->data);
+	}
 }
 
 unsigned int
@@ -3953,9 +4000,12 @@
 	/*** Begin code for adding from server list to local list ***/
 
 	for (curitem=od->ssi.local; curitem; curitem=curitem->next) {
-		if (curitem->name && !g_utf8_validate(curitem->name, -1, NULL))
+		if (curitem->name && !g_utf8_validate(curitem->name, -1, NULL)) {
 			/* Got node with invalid UTF-8 in the name.  Skip it. */
-			break;
+			purple_debug_warning("oscar", "ssi: server list contains item of "
+					"type 0x%04hhx with a non-utf8 name\n", curitem->type);
+			continue;
+		}
 
 		switch (curitem->type) {
 			case AIM_SSI_TYPE_BUDDY: { /* Buddy */
@@ -4004,17 +4054,10 @@
 			} break;
 
 			case AIM_SSI_TYPE_GROUP: { /* Group */
-				char *gname;
-				char *gname_utf8;
-
-				gname = curitem->name;
-				gname_utf8 = oscar_utf8_try_convert(account, od, gname);
-
-				if (gname_utf8 != NULL && purple_find_group(gname_utf8) == NULL) {
-					g = purple_group_new(gname_utf8);
+				if (curitem->name != NULL && purple_find_group(curitem->name) == NULL) {
+					g = purple_group_new(curitem->name);
 					purple_blist_add_group(g, NULL);
 				}
-				g_free(gname_utf8);
 			} break;
 
 			case AIM_SSI_TYPE_PERMIT: { /* Permit buddy (unless we're on ICQ) */
@@ -5196,23 +5239,6 @@
 						gc);
 }
 
-void oscar_format_username(PurpleConnection *gc, const char *nick) {
-	OscarData *od = purple_connection_get_protocol_data(gc);
-	if (!oscar_util_name_compare(purple_account_get_username(purple_connection_get_account(gc)), nick)) {
-		if (!flap_connection_getbytype(od, SNAC_FAMILY_ADMIN)) {
-			od->setnick = TRUE;
-			g_free(od->newformatting);
-			od->newformatting = g_strdup(nick);
-			aim_srv_requestnew(od, SNAC_FAMILY_ADMIN);
-		} else {
-			aim_admin_setnick(od, flap_connection_getbytype(od, SNAC_FAMILY_ADMIN), nick);
-		}
-	} else {
-		purple_notify_error(gc, NULL, _("The new formatting is invalid."),
-						  _("Username formatting can change only capitalization and whitespace."));
-	}
-}
-
 static void oscar_confirm_account(PurplePluginAction *action)
 {
 	PurpleConnection *gc;
--- a/libpurple/protocols/oscar/oscarcommon.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/oscar/oscarcommon.h	Sun Mar 13 18:14:04 2011 +0000
@@ -102,6 +102,5 @@
 void oscar_send_file(PurpleConnection *gc, const char *who, const char *file);
 PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who);
 gboolean oscar_offline_message(const PurpleBuddy *buddy);
-void oscar_format_username(PurpleConnection *gc, const char *nick);
 GList *oscar_actions(PurplePlugin *plugin, gpointer context);
 void oscar_init(PurplePlugin *plugin, gboolean is_icq);
--- a/libpurple/protocols/qq/ChangeLog	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/ChangeLog	Sun Mar 13 18:14:04 2011 +0000
@@ -1,3 +1,12 @@
+2010.01.23 - flos <lonicerae(at)gmail.com>
+	* added an option to force incoming message in chat room to use a default font instead of the font in message itself
+
+2010.01.18 - flos <lonicerae(at)gmail.com>
+	* added type 'UPDCLS' and 'UID' for implementing business logic layer
+
+2010.01.13 - ccpaging <ccpaging(at)gmail.com>
+	* qq2009-1 patch from ccpaging
+
 2009.04.23 - flos <lonicerae(at)gmail.com>
 	* Fixed a bug of updating buddy who is not in user's buddy list
 
--- a/libpurple/protocols/qq/buddy_info.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_info.c	Sun Mar 13 18:14:04 2011 +0000
@@ -26,6 +26,7 @@
 #include "debug.h"
 #include "notify.h"
 #include "request.h"
+#include "connection.h"
 
 #include "utils.h"
 #include "packet_parse.h"
@@ -221,8 +222,8 @@
 	g_strfreev(segments);
 }
 
-void qq_request_buddy_info(PurpleConnection *gc, guint32 uid,
-		guint32 update_class, int action)
+void qq_request_buddy_info(PurpleConnection *gc, UID uid,
+		UPDCLS update_class, int action)
 {
 	gchar raw_data[16] = {0};
 
@@ -620,7 +621,7 @@
 	PurpleBuddy *buddy = NULL;
 	qq_data *qd = NULL;
 	qq_buddy_data *bd = NULL;
-	guint32 uid;
+	UID uid;
 	gchar *who;
 	gchar *alias_utf8;
 
@@ -741,7 +742,7 @@
 	return;
 }
 
-void qq_request_get_level(PurpleConnection *gc, guint32 uid)
+void qq_request_get_level(PurpleConnection *gc, UID uid)
 {
 	qq_data *qd = (qq_data *) gc->proto_data;
 	guint8 buf[16] = {0};
@@ -756,7 +757,7 @@
 	qq_send_cmd(gc, QQ_CMD_GET_LEVEL, buf, bytes);
 }
 
-void qq_request_get_level_2007(PurpleConnection *gc, guint32 uid)
+void qq_request_get_level_2007(PurpleConnection *gc, UID uid)
 {
 	guint8 buf[16] = {0};
 	gint bytes = 0;
@@ -767,7 +768,7 @@
 	qq_send_cmd(gc, QQ_CMD_GET_LEVEL, buf, bytes);
 }
 
-void qq_request_get_buddies_level(PurpleConnection *gc, guint32 update_class)
+void qq_request_get_buddies_level(PurpleConnection *gc, UPDCLS update_class)
 {
 	qq_data *qd = (qq_data *) gc->proto_data;
 	PurpleBuddy *buddy;
@@ -797,7 +798,8 @@
 static void process_level(PurpleConnection *gc, guint8 *data, gint data_len)
 {
 	gint bytes = 0;
-	guint32 uid, onlineTime;
+	UID uid;
+	guint32 onlineTime;
 	guint16 level, timeRemainder;
 	qq_buddy_data *bd;
 
@@ -829,7 +831,8 @@
 static void process_level_2007(PurpleConnection *gc, guint8 *data, gint data_len)
 {
 	gint bytes;
-	guint32 uid, onlineTime;
+	UID uid;
+	guint32 onlineTime;
 	guint16 level, timeRemainder;
 	qq_buddy_data *bd;
 	guint16 str_len;
--- a/libpurple/protocols/qq/buddy_info.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_info.h	Sun Mar 13 18:14:04 2011 +0000
@@ -78,15 +78,14 @@
 gchar *qq_get_icon_path(gchar *icon_name);
 void qq_change_icon_cb(PurpleConnection *gc, const char *filepath);
 
-void qq_request_buddy_info(PurpleConnection *gc, guint32 uid,
-		guint32 update_class, int action);
+void qq_request_buddy_info(PurpleConnection *gc, UID uid, UPDCLS update_class, int action);
 void qq_set_custom_icon(PurpleConnection *gc, PurpleStoredImage *img);
 void qq_process_change_info(PurpleConnection *gc, guint8 *data, gint data_len);
 void qq_process_get_buddy_info(guint8 *data, gint data_len, guint32 action, PurpleConnection *gc);
 
-void qq_request_get_level(PurpleConnection *gc, guint32 uid);
-void qq_request_get_level_2007(PurpleConnection *gc, guint32 uid);
-void qq_request_get_buddies_level(PurpleConnection *gc, guint32 update_class);
+void qq_request_get_level(PurpleConnection *gc, UID uid);
+void qq_request_get_level_2007(PurpleConnection *gc, UID uid);
+void qq_request_get_buddies_level(PurpleConnection *gc, UPDCLS update_class);
 void qq_process_get_level_reply(guint8 *buf, gint buf_len, PurpleConnection *gc);
 
 void qq_update_buddy_icon(PurpleAccount *account, const gchar *who, gint face);
--- a/libpurple/protocols/qq/buddy_list.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_list.c	Sun Mar 13 18:14:04 2011 +0000
@@ -53,7 +53,7 @@
 } qq_buddy_online;
 
 /* get a list of online_buddies */
-void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, guint32 update_class)
+void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, UPDCLS update_class)
 {
 	guint8 *raw_data;
 	gint bytes = 0;
@@ -77,7 +77,7 @@
 
 /* position starts with 0x0000,
  * server may return a position tag if list is too long for one packet */
-void qq_request_get_buddies(PurpleConnection *gc, guint16 position, guint32 update_class)
+void qq_request_get_buddies(PurpleConnection *gc, guint16 position, UPDCLS update_class)
 {
 	qq_data *qd;
 	guint8 raw_data[16] = {0};
@@ -101,7 +101,7 @@
 }
 
 /* get all list, buddies & Quns with groupsid support */
-void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, guint32 update_class)
+void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, UPDCLS update_class)
 {
 	guint8 raw_data[16] = {0};
 	gint bytes = 0;
@@ -362,7 +362,7 @@
 	gint bytes;
 	guint8 sub_cmd, reply_code;
 	guint32 unknown, position;
-	guint32 uid;
+	UID uid;
 	guint8 type;
 	qq_room_data *rmd;
 
@@ -455,7 +455,7 @@
 }
 
 /* send a packet to change my online status */
-void qq_request_change_status(PurpleConnection *gc, guint32 update_class)
+void qq_request_change_status(PurpleConnection *gc, UPDCLS update_class)
 {
 	qq_data *qd;
 	guint8 raw_data[16] = {0};
@@ -525,7 +525,7 @@
 {
 	qq_data *qd;
 	gint bytes;
-	guint32 my_uid;
+	UID my_uid;
 	gchar *who;
 	PurpleBuddy *buddy;
 	qq_buddy_data *bd;
@@ -583,7 +583,7 @@
 }
 
 /*TODO: maybe this should be qq_update_buddy_status() ?*/
-void qq_update_buddy_status(PurpleConnection *gc, guint32 uid, guint8 status, guint8 flag)
+void qq_update_buddy_status(PurpleConnection *gc, UID uid, guint8 status, guint8 flag)
 {
 	gchar *who;
 	const gchar *status_id;
--- a/libpurple/protocols/qq/buddy_list.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_list.h	Sun Mar 13 18:14:04 2011 +0000
@@ -30,7 +30,7 @@
 
 #include "qq.h"
 typedef struct _qq_buddy_status {
-	guint32 uid;
+	UID uid;
 	guint8 unknown1;
 	struct in_addr ip;
 	guint16 port;
@@ -40,20 +40,20 @@
 	guint8 unknown_key[QQ_KEY_LENGTH];
 } qq_buddy_status;
 
-void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, guint32 update_class);
+void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, UPDCLS update_class);
 guint8 qq_process_get_buddies_online(guint8 *data, gint data_len, PurpleConnection *gc);
 
-void qq_request_get_buddies(PurpleConnection *gc, guint16 position, guint32 update_class);
+void qq_request_get_buddies(PurpleConnection *gc, guint16 position, UPDCLS update_class);
 guint16 qq_process_get_buddies(guint8 *data, gint data_len, PurpleConnection *gc);
 
-void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, guint32 update_class);
+void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, UPDCLS update_class);
 guint32 qq_process_get_buddies_and_rooms(guint8 *data, gint data_len, PurpleConnection *gc);
 
-void qq_request_change_status(PurpleConnection *gc, guint32 update_class);
+void qq_request_change_status(PurpleConnection *gc, UPDCLS update_class);
 void qq_process_change_status(guint8 *data, gint data_len, PurpleConnection *gc);
 void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnection *gc);
 
 void qq_update_buddyies_status(PurpleConnection *gc);
-void qq_update_buddy_status(PurpleConnection *gc, guint32 uid, guint8 status, guint8 flag);
+void qq_update_buddy_status(PurpleConnection *gc, UID uid, guint8 status, guint8 flag);
 void qq_buddy_data_free_all(PurpleConnection *gc);
 #endif
--- a/libpurple/protocols/qq/buddy_memo.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_memo.c	Sun Mar 13 18:14:04 2011 +0000
@@ -83,7 +83,7 @@
 
 typedef struct _modify_memo_request {
 	PurpleConnection *gc;
-	guint32 bd_uid;
+	UID bd_uid;
 	gchar **segments;
 } modify_memo_request;
 
@@ -107,7 +107,7 @@
 	purple_debug_info("QQ", "memo freed\n");
 }
 
-static void update_buddy_memo(PurpleConnection *gc, guint32 bd_uid, gchar *alias)
+static void update_buddy_memo(PurpleConnection *gc, UID bd_uid, gchar *alias)
 {
 	PurpleAccount *account;
 	PurpleBuddy *buddy;
@@ -127,7 +127,7 @@
 	purple_blist_alias_buddy(buddy, (const char*)alias);
 }
 
-static void request_change_memo(PurpleConnection *gc, guint32 bd_uid, gchar **segments)
+static void request_change_memo(PurpleConnection *gc, UID bd_uid, gchar **segments)
 {
 	gint bytes;
 	/* Attention, length of each segment must be guint8(0~255),
@@ -170,7 +170,7 @@
 static void memo_modify_ok_cb(modify_memo_request *memo_request, PurpleRequestFields *fields)
 {
 	PurpleConnection *gc;
-	guint32 bd_uid;
+	UID bd_uid;
 	gchar **segments;
 	const gchar *utf8_str;
 	gchar *value = NULL;
@@ -187,7 +187,7 @@
 		utf8_str = purple_request_fields_get_string(fields, memo_id[index]);
 		/* update alias */
 		if (QQ_MEMO_ALIAS == index) {
-			update_buddy_memo(gc, bd_uid, segments[QQ_MEMO_ALIAS]);
+			update_buddy_memo(gc, (UID)bd_uid, segments[QQ_MEMO_ALIAS]);
 		}
 		if (NULL == utf8_str) {
 			value = g_strdup("");
@@ -213,7 +213,7 @@
 }
 
 /* memo modify dialogue */
-static void memo_modify_dialogue(PurpleConnection *gc, guint32 bd_uid, gchar **segments, guint32 action)
+static void memo_modify_dialogue(PurpleConnection *gc, UID bd_uid, gchar **segments, guint32 action)
 {
 	modify_memo_request *memo_request;
 	PurpleRequestField *field;
@@ -272,7 +272,7 @@
 	}
 }
 
-static void qq_create_buddy_memo(PurpleConnection *gc, guint32 bd_uid, guint32 action)
+static void qq_create_buddy_memo(PurpleConnection *gc, UID bd_uid, guint32 action)
 {
 	gchar **segments;
 	gint index;
@@ -285,9 +285,11 @@
 	memo_modify_dialogue(gc, bd_uid, segments, action);
 }
 
-/* process reply to get_memo packet */
+/* process reply to get_memo packet
+ * here, update_class will be regarded as buddy's uid. because some 
+ * memo packages returned without uid, which will make us confused */
 void qq_process_get_buddy_memo(PurpleConnection *gc, guint8* data, gint data_len,
-		guint32 update_class, guint32 action)
+		UPDCLS update_class, guint32 action)
 {
 	gchar **segments;
 	gint bytes;
@@ -314,7 +316,9 @@
 	if (1 == data_len) { /* only one byte */
 		purple_debug_info("QQ", "memo packet contains no buddy uid and memo...\n");
 		if (QQ_BUDDY_MEMO_MODIFY == action) {
-			qq_create_buddy_memo(gc, (guint32)update_class, QQ_BUDDY_MEMO_MODIFY);
+			UID mod_uid;
+			mod_uid = (UID)update_class;
+			qq_create_buddy_memo(gc, mod_uid, QQ_BUDDY_MEMO_MODIFY);
 			return;
 		}
 		return;
@@ -354,9 +358,9 @@
 			}
 
 			/* common action, update buddy memo */
-			update_buddy_memo(gc, rcv_uid, segments[QQ_MEMO_ALIAS]);
+			update_buddy_memo(gc, (UID)rcv_uid, segments[QQ_MEMO_ALIAS]);
 
-			/* memo is thing that we regard our buddy as, so we need one more buddy_uid */
+			/* memo is a thing that we regard our buddy as, so we need one more buddy_uid */
 			memo_modify_dialogue(gc, rcv_uid, segments, action);
 			break;
 		default:
@@ -365,8 +369,12 @@
 	}
 }
 
-/* request buddy memo */
-void qq_request_buddy_memo(PurpleConnection *gc, guint32 bd_uid, guint32 update_class, guint32 action)
+/* request buddy memo
+ *
+ * param: gc, uid, update_class, action
+ * here, update_class will be set to buddy's uid. because some memo 
+ * packages returned without uid, which will make us confused */
+void qq_request_buddy_memo(PurpleConnection *gc, UID bd_uid, UPDCLS update_class, guint32 action)
 {
 	guint8 raw_data[16] = {0};
 	gint bytes;
--- a/libpurple/protocols/qq/buddy_memo.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_memo.h	Sun Mar 13 18:14:04 2011 +0000
@@ -28,6 +28,7 @@
 #include <glib.h>
 #include "connection.h"
 #include "blist.h"
+#include "qq.h"
 
 #define QQ_BUDDY_MEMO_REQUEST_SUCCESS 0x00
 
@@ -40,9 +41,9 @@
 };
 
 
-void qq_process_get_buddy_memo(PurpleConnection *gc, guint8* data, gint data_len, guint32 update_class, guint32 action);
+void qq_process_get_buddy_memo(PurpleConnection *gc, guint8* data, gint data_len, UPDCLS update_class, guint32 action);
 
-void qq_request_buddy_memo(PurpleConnection *gc, guint32 bd_uid, guint32 update_class, guint32 action);
+void qq_request_buddy_memo(PurpleConnection *gc, UID bd_uid, UPDCLS update_class, guint32 action);
 
 #endif
 
--- a/libpurple/protocols/qq/buddy_opt.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Sun Mar 13 18:14:04 2011 +0000
@@ -51,12 +51,12 @@
 
 typedef struct _qq_buddy_req {
 	PurpleConnection *gc;
-	guint32 uid;
+	UID uid;
 	guint8 *auth;
 	guint8 auth_len;
 } qq_buddy_req;
 
-void add_buddy_authorize_input(PurpleConnection *gc, guint32 uid,
+void add_buddy_authorize_input(PurpleConnection *gc, UID uid,
 		guint8 *auth, guint8 auth_len);
 
 static void buddy_req_free(qq_buddy_req *add_req)
@@ -88,7 +88,7 @@
 	return g;
 }
 
-static qq_buddy_data *qq_buddy_data_new(guint32 uid)
+static qq_buddy_data *qq_buddy_data_new(UID uid)
 {
 	qq_buddy_data *bd = g_new0(qq_buddy_data, 1);
 	memset(bd, 0, sizeof(qq_buddy_data));
@@ -97,7 +97,7 @@
 	return bd;
 }
 
-qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid)
+qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, UID uid)
 {
 	gchar *who;
 	PurpleBuddy *buddy;
@@ -131,7 +131,7 @@
 }
 
 /* create purple buddy without data and display with no-auth icon */
-PurpleBuddy *qq_buddy_new(PurpleConnection *gc, guint32 uid)
+PurpleBuddy *qq_buddy_new(PurpleConnection *gc, UID uid)
 {
 	PurpleBuddy *buddy;
 	PurpleGroup *group;
@@ -175,7 +175,7 @@
 	purple_blist_remove_buddy(buddy);
 }
 
-PurpleBuddy *qq_buddy_find(PurpleConnection *gc, guint32 uid)
+PurpleBuddy *qq_buddy_find(PurpleConnection *gc, UID uid)
 {
 	PurpleBuddy *buddy;
 	gchar *who;
@@ -188,7 +188,7 @@
 	return buddy;
 }
 
-PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid)
+PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, UID uid)
 {
 	PurpleBuddy *buddy;
 	qq_buddy_data *bd;
@@ -213,7 +213,7 @@
 }
 
 /* send packet to remove a buddy from my buddy list */
-static void request_remove_buddy(PurpleConnection *gc, guint32 uid)
+static void request_remove_buddy(PurpleConnection *gc, UID uid)
 {
 	gchar uid_str[11];
 	gint bytes;
@@ -226,7 +226,7 @@
 }
 
 static void request_remove_buddy_ex(PurpleConnection *gc,
-		guint32 uid, guint8 *auth, guint8 auth_len)
+		UID uid, guint8 *auth, guint8 auth_len)
 {
 	gint bytes;
 	guint8 *raw_data;
@@ -246,7 +246,7 @@
 	qq_send_cmd_mess(gc, QQ_CMD_REMOVE_BUDDY, raw_data, bytes, 0, uid);
 }
 
-void qq_request_auth_code(PurpleConnection *gc, guint8 cmd, guint16 sub_cmd, guint32 uid)
+void qq_request_auth_code(PurpleConnection *gc, guint8 cmd, guint16 sub_cmd, UID uid)
 {
 	guint8 raw_data[16];
 	gint bytes;
@@ -260,7 +260,7 @@
 	qq_send_cmd_mess(gc, QQ_CMD_AUTH_CODE, raw_data, bytes, 0, uid);
 }
 
-void qq_process_auth_code(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid)
+void qq_process_auth_code(PurpleConnection *gc, guint8 *data, gint data_len, UID uid)
 {
 	gint bytes;
 	guint8 cmd, reply;
@@ -308,7 +308,7 @@
 	buddy_req_free(add_req);
 }
 
-static void add_buddy_question_input(PurpleConnection *gc, guint32 uid, gchar *question)
+static void add_buddy_question_input(PurpleConnection *gc, UID uid, gchar *question)
 {
 	gchar *who, *msg;
 	qq_buddy_req *add_req;
@@ -336,7 +336,7 @@
 }
 
 void qq_request_question(PurpleConnection *gc,
-		guint8 cmd, guint32 uid, const gchar *question_utf8, const gchar *answer_utf8)
+		guint8 cmd, UID uid, const gchar *question_utf8, const gchar *answer_utf8)
 {
 	guint8 raw_data[MAX_PACKET_SIZE - 16];
 	gint bytes;
@@ -371,7 +371,7 @@
 	return;
 }
 
-static void request_add_buddy_by_question(PurpleConnection *gc, guint32 uid,
+static void request_add_buddy_by_question(PurpleConnection *gc, UID uid,
 	guint8 *code, guint16 code_len)
 {
 	guint8 raw_data[MAX_PACKET_SIZE - 16];
@@ -395,7 +395,7 @@
 	qq_send_cmd(gc, QQ_CMD_ADD_BUDDY_AUTH_EX, raw_data, bytes);
 }
 
-void qq_process_question(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid)
+void qq_process_question(PurpleConnection *gc, guint8 *data, gint data_len, UID uid)
 {
 	gint bytes;
 	guint8 cmd, reply;
@@ -461,7 +461,7 @@
 }
 
 /* try to remove myself from someone's buddy list */
-static void request_buddy_remove_me(PurpleConnection *gc, guint32 uid)
+static void request_buddy_remove_me(PurpleConnection *gc, UID uid)
 {
 	guint8 raw_data[16] = {0};
 	gint bytes = 0;
@@ -474,7 +474,7 @@
 }
 
 /* try to add a buddy without authentication */
-static void request_add_buddy_no_auth(PurpleConnection *gc, guint32 uid)
+static void request_add_buddy_no_auth(PurpleConnection *gc, UID uid)
 {
 	gchar uid_str[11];
 
@@ -486,7 +486,7 @@
 			(guint8 *) uid_str, strlen(uid_str), 0, uid);
 }
 
-static void request_add_buddy_no_auth_ex(PurpleConnection *gc, guint32 uid)
+static void request_add_buddy_no_auth_ex(PurpleConnection *gc, UID uid)
 {
 	guint bytes;
 	guint8 raw_data[16];
@@ -499,7 +499,7 @@
 }
 
 /* this buddy needs authentication, text conversion is done at lowest level */
-static void request_add_buddy_auth(PurpleConnection *gc, guint32 uid, const gchar response, const gchar *text)
+static void request_add_buddy_auth(PurpleConnection *gc, UID uid, const gchar response, const gchar *text)
 {
 	guint8 raw_data[MAX_PACKET_SIZE - 16];
 	gint bytes;
@@ -526,7 +526,7 @@
 	qq_send_cmd(gc, QQ_CMD_ADD_BUDDY_AUTH, raw_data, bytes);
 }
 
-static void request_add_buddy_auth_ex(PurpleConnection *gc, guint32 uid,
+static void request_add_buddy_auth_ex(PurpleConnection *gc, UID uid,
 	const gchar *text, guint8 *auth, guint8 auth_len)
 {
 	guint8 raw_data[MAX_PACKET_SIZE - 16];
@@ -643,7 +643,7 @@
 	buddy_req_free(add_req);
 }
 
-void add_buddy_authorize_input(PurpleConnection *gc, guint32 uid,
+void add_buddy_authorize_input(PurpleConnection *gc, UID uid,
 		guint8 *auth, guint8 auth_len)
 {
 	gchar *who, *msg;
@@ -683,7 +683,7 @@
 void qq_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
 {
 	qq_data *qd;
-	guint32 uid;
+	UID uid;
 
 	g_return_if_fail(NULL != gc && NULL != gc->proto_data);
 	g_return_if_fail(buddy != NULL);
@@ -733,7 +733,7 @@
 }
 
 /* process the server reply for my request to remove a buddy */
-void qq_process_remove_buddy(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid)
+void qq_process_remove_buddy(PurpleConnection *gc, guint8 *data, gint data_len, UID uid)
 {
 	PurpleBuddy *buddy = NULL;
 	gchar *msg;
@@ -756,7 +756,7 @@
 }
 
 /* process the server reply for my request to remove myself from a buddy */
-void qq_process_buddy_remove_me(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid)
+void qq_process_buddy_remove_me(PurpleConnection *gc, guint8 *data, gint data_len, UID uid)
 {
 	gchar *msg;
 
@@ -772,7 +772,7 @@
 }
 
 void qq_process_add_buddy_no_auth(PurpleConnection *gc,
-		guint8 *data, gint data_len, guint32 uid)
+		guint8 *data, gint data_len, UID uid)
 {
 	qq_data *qd;
 	gchar **segments;
@@ -834,11 +834,11 @@
 }
 
 void qq_process_add_buddy_no_auth_ex(PurpleConnection *gc,
-		guint8 *data, gint data_len, guint32 uid)
+		guint8 *data, gint data_len, UID uid)
 {
 	qq_data *qd;
 	gint bytes;
-	guint32 dest_uid;
+	UID dest_uid;
 	guint8 reply;
 	guint8 auth_type;
 
@@ -903,7 +903,7 @@
 {
 	qq_data *qd;
 	qq_buddy_data *bd;
-	guint32 uid;
+	UID uid;
 
 	g_return_if_fail(gc != NULL && gc->proto_data != NULL);
 	g_return_if_fail(buddy != NULL);
@@ -933,7 +933,7 @@
 	 * otherwise purple segmentation fault */
 }
 
-static void buddy_add_input(PurpleConnection *gc, guint32 uid, gchar *reason)
+static void buddy_add_input(PurpleConnection *gc, UID uid, gchar *reason)
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	qq_buddy_req *add_req;
@@ -967,7 +967,7 @@
 static void server_buddy_add_request(PurpleConnection *gc, gchar *from, gchar *to,
 		guint8 *data, gint data_len)
 {
-	guint32 uid;
+	UID uid;
 	gchar *msg, *reason;
 
 	g_return_if_fail(from != NULL && to != NULL);
@@ -996,7 +996,7 @@
 	gint bytes;
 	guint8 cmd;
 	guint8 reply;
-	guint32 uid;
+	UID uid;
 	guint16 flag1, flag2;
 
 	g_return_if_fail(data != NULL && data_len >= 5);
@@ -1026,7 +1026,7 @@
 {
 	guint8 *raw_data;
 	gint bytes;
-	guint32 uid;
+	UID uid;
 
 	g_return_if_fail(code != NULL && code_len > 0 && from != NULL);
 
@@ -1073,7 +1073,7 @@
 		guint8 *data, gint data_len)
 {
 	gint bytes;
-	guint32 uid;
+	UID uid;
 	gchar *msg;
 	guint8 allow_reverse;
 
@@ -1103,7 +1103,7 @@
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	PurpleBuddy *buddy;
-	guint32 uid;
+	UID uid;
 	qq_buddy_req *add_req;
 	gchar *who;
 	gchar *primary;
@@ -1177,7 +1177,7 @@
 {
 	PurpleAccount *account = purple_connection_get_account(gc);
 	qq_data *qd;
-	guint32 uid;
+	UID uid;
 
 	g_return_if_fail(from != NULL && to != NULL);
 
@@ -1204,7 +1204,7 @@
 static void server_buddy_rejected_me(PurpleConnection *gc, gchar *from, gchar *to,
 		guint8 *data, gint data_len)
 {
-	guint32 uid;
+	UID uid;
 	PurpleBuddy *buddy;
 	gchar *msg, *msg_utf8;
 	gint bytes;
--- a/libpurple/protocols/qq/buddy_opt.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/buddy_opt.h	Sun Mar 13 18:14:04 2011 +0000
@@ -54,31 +54,31 @@
 void qq_remove_buddy_and_me(PurpleBlistNode * node);
 void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group);
 
-void qq_process_remove_buddy(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid);
-void qq_process_buddy_remove_me(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid);
+void qq_process_remove_buddy(PurpleConnection *gc, guint8 *data, gint data_len, UID uid);
+void qq_process_buddy_remove_me(PurpleConnection *gc, guint8 *data, gint data_len, UID uid);
 void qq_process_add_buddy_no_auth(PurpleConnection *gc,
-		guint8 *data, gint data_len, guint32 uid);
+		guint8 *data, gint data_len, UID uid);
 void qq_process_add_buddy_no_auth_ex(PurpleConnection *gc,
-		guint8 *data, gint data_len, guint32 uid);
+		guint8 *data, gint data_len, UID uid);
 void qq_process_add_buddy_auth(guint8 *data, gint data_len, PurpleConnection *gc);
 void qq_process_buddy_from_server(PurpleConnection *gc, int funct,
 		gchar *from, gchar *to, guint8 *data, gint data_len);
 
 void qq_process_buddy_check_code(PurpleConnection *gc, guint8 *data, gint data_len);
 
-void qq_request_auth_code(PurpleConnection *gc, guint8 cmd, guint16 sub_cmd, guint32 uid);
-void qq_process_auth_code(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid);
+void qq_request_auth_code(PurpleConnection *gc, guint8 cmd, guint16 sub_cmd, UID uid);
+void qq_process_auth_code(PurpleConnection *gc, guint8 *data, gint data_len, UID uid);
 void qq_request_question(PurpleConnection *gc,
-		guint8 cmd, guint32 uid, const gchar *question_utf8, const gchar *answer_utf8);
-void qq_process_question(PurpleConnection *gc, guint8 *data, gint data_len, guint32 uid);
+		guint8 cmd, UID uid, const gchar *question_utf8, const gchar *answer_utf8);
+void qq_process_question(PurpleConnection *gc, guint8 *data, gint data_len, UID uid);
 
 void qq_process_add_buddy_auth_ex(PurpleConnection *gc, guint8 *data, gint data_len, guint32 ship32);
 
-qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid);
+qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, UID uid);
 void qq_buddy_data_free(qq_buddy_data *bd);
 
-PurpleBuddy *qq_buddy_new(PurpleConnection *gc, guint32 uid);
-PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid);
-PurpleBuddy *qq_buddy_find(PurpleConnection *gc, guint32 uid);
+PurpleBuddy *qq_buddy_new(PurpleConnection *gc, UID uid);
+PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, UID uid);
+PurpleBuddy *qq_buddy_find(PurpleConnection *gc, UID uid);
 PurpleGroup *qq_group_find_or_new(const gchar *group_name);
 #endif
--- a/libpurple/protocols/qq/file_trans.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/file_trans.c	Sun Mar 13 18:14:04 2011 +0000
@@ -38,14 +38,12 @@
 #include "send_file.h"
 #include "utils.h"
 
-struct _qq_file_header {
+typedef struct _qq_file_header {
 	guint16 client_ver;
 	guint8 file_key;
-	guint32 sender_uid;
-	guint32 receiver_uid;
-};
-
-typedef struct _qq_file_header qq_file_header;
+	UID sender_uid;
+	UID receiver_uid;
+} qq_file_header;
 
 static guint32 _get_file_key(guint8 seed)
 {
@@ -62,12 +60,12 @@
 	return _get_file_key(seed);
 }
 
-static guint32 _decrypt_qq_uid(guint32 uid, guint32 key)
+static guint32 _decrypt_qq_uid(UID uid, guint32 key)
 {
 	return ~(uid ^ key);
 }
 
-static guint32 _encrypt_qq_uid(guint32 uid, guint32 key)
+static guint32 _encrypt_qq_uid(UID uid, guint32 key)
 {
 	return (~uid) ^ key;
 }
@@ -232,7 +230,7 @@
 }
 #endif
 
-static gint _qq_send_file(PurpleConnection *gc, guint8 *data, gint len, guint16 packet_type, guint32 to_uid)
+static gint _qq_send_file(PurpleConnection *gc, guint8 *data, gint len, guint16 packet_type, UID to_uid)
 {
 	guint8 *raw_data;
 	gint bytes = 0;
@@ -259,7 +257,7 @@
 }
 
 /* send a file to udp channel with QQ_FILE_CONTROL_PACKET_TAG */
-void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, guint32 to_uid, guint8 hellobyte)
+void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, UID to_uid, guint8 hellobyte)
 {
 	qq_data *qd;
 	gint bytes, bytes_expected, encrypted_len;
--- a/libpurple/protocols/qq/file_trans.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/file_trans.h	Sun Mar 13 18:14:04 2011 +0000
@@ -26,6 +26,7 @@
 #define _QQ_QQ_FILE_TRANS_H_
 
 #include "server.h"
+#include "qq.h"
 
 enum {
 	QQ_FILE_CMD_SENDER_SAY_HELLO = 0x31,
@@ -59,7 +60,7 @@
 #define QQ_FILE_AGENT_PACKET_TAG 0x04
 /* #define QQ_PACKET_TAIL          0x03 */   /* all QQ text packets end with it */
 
-void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, guint32 to_uid, guint8 hellobyte);
+void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, UID to_uid, guint8 hellobyte);
 void qq_process_recv_file(PurpleConnection *gc, guint8 *data, gint len);
 /* void qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type, guint8 sub_type, guint32 fragment_index, guint16 seq, guint8 *data, gint len); */
 void qq_xfer_close_file(PurpleXfer *xfer);
--- a/libpurple/protocols/qq/group.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group.h	Sun Mar 13 18:14:04 2011 +0000
@@ -40,14 +40,13 @@
 	QQ_ROOM_ROLE_ADMIN
 } qq_room_role;
 
-typedef struct _qq_room_data qq_room_data;
-struct _qq_room_data {
+typedef struct _qq_room_data {
 	/* all these will be saved when we exit Purple */
 	qq_room_role my_role;	/* my role for this room */
 	guint32 id;
 	guint32 ext_id;
 	guint8 type8;			/* permanent or temporory */
-	guint32 creator_uid;
+	UID creator_uid;
 	guint32 category;
 	guint8 auth_type;
 	gchar *title_utf8;
@@ -57,7 +56,7 @@
 
 	gboolean is_got_buddies;
 	GList *members;
-};
+} qq_room_data;
 
 GList *qq_chat_info(PurpleConnection *gc);
 GHashTable *qq_chat_info_defaults(PurpleConnection *gc, const gchar *chat_name);
--- a/libpurple/protocols/qq/group_im.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_im.c	Sun Mar 13 18:14:04 2011 +0000
@@ -161,7 +161,7 @@
 }
 
 void qq_room_got_chat_in(PurpleConnection *gc,
-		guint32 room_id, guint32 uid_from, const gchar *msg, time_t in_time)
+		guint32 room_id, UID uid_from, const gchar *msg, time_t in_time)
 {
 	PurpleConversation *conv;
 	qq_data *qd;
@@ -207,10 +207,11 @@
 {
 	gchar *msg_smiley, *msg_fmt, *msg_utf8;
 	gint bytes, tail_len;
+	qq_data *qd;
 	struct {
 		guint32 ext_id;
 		guint8 type8;
-		guint32 member_uid;
+		UID member_uid;
 		guint16 unknown;
 		guint16 msg_seq;
 		time_t send_time;
@@ -222,11 +223,15 @@
 	guint16 content_type;
 	guint8 frag_count, frag_index;
 	guint16 msg_id;
+	guint32 use_default_font;
 	qq_im_format *fmt = NULL;
+	qd = (qq_data *) gc->proto_data;
 
 	/* at least include im_text.msg_len */
 	g_return_if_fail(data != NULL && data_len > 23);
 
+	use_default_font = (qd->custom) & QQ_CUSTOM_USE_DEFAULT_FONT;
+
 	/* qq_show_packet("ROOM_IM", data, data_len); */
 	memset(&im_text, 0, sizeof(im_text));
 	bytes = 0;
@@ -279,8 +284,14 @@
 	/* group im_group has no flag to indicate whether it has font_attr or not */
 	msg_smiley = qq_emoticon_to_purple(im_text.msg);
 	if (fmt != NULL) {
+		purple_debug_info("QQ", "going to use_default_font\n");
+		if (QQ_CUSTOM_USE_DEFAULT_FONT == use_default_font) {
+			qq_im_fmt_reset_font(fmt);
+			purple_debug_info("QQ", "use_default_font set\n");
+		}
 		msg_fmt = qq_im_fmt_to_purple(fmt, msg_smiley);
 		msg_utf8 =  qq_to_utf8(msg_fmt, QQ_CHARSET_DEFAULT);
+		purple_debug_info("QQ", "passed!\n");
 		g_free(msg_fmt);
 		qq_im_fmt_free(fmt);
 	} else {
--- a/libpurple/protocols/qq/group_im.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_im.h	Sun Mar 13 18:14:04 2011 +0000
@@ -30,11 +30,16 @@
 #include "conversation.h"
 #include "group.h"
 
+enum {
+	QQ_CUSTOM_USE_DEFAULT_FONT = 0x00000001,
+	QQ_CUSTOM_NONE = 0x00000000
+};
+
 PurpleConversation *qq_room_conv_open(PurpleConnection *gc, qq_room_data *rmd);
 void qq_room_conv_set_onlines(PurpleConnection *gc, qq_room_data *rmd);
 
 void qq_room_got_chat_in(PurpleConnection *gc,
-		guint32 room_id, guint32 uid_from, const gchar *msg, time_t in_time);
+		guint32 room_id, UID uid_from, const gchar *msg, time_t in_time);
 
 int qq_chat_send(PurpleConnection *gc, int id, const char *message, PurpleMessageFlags flags);
 void qq_process_room_send_im(PurpleConnection *gc, guint8 *data, gint len);
@@ -43,3 +48,4 @@
 void qq_process_room_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 msg_type);
 
 #endif
+
--- a/libpurple/protocols/qq/group_info.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_info.c	Sun Mar 13 18:14:04 2011 +0000
@@ -65,7 +65,7 @@
 }
 
 /* send packet to get info for each group member */
-gint qq_request_room_get_buddies(PurpleConnection *gc, guint32 room_id, guint32 update_class)
+gint qq_request_room_get_buddies(PurpleConnection *gc, guint32 room_id, UPDCLS update_class)
 {
 	guint8 *raw_data;
 	gint bytes, num;
@@ -177,7 +177,8 @@
 	PurpleConversation *conv;
 	guint8 organization, role;
 	guint16 unknown, max_members;
-	guint32 member_uid, id, ext_id;
+	UID member_uid;
+	guint32 id, ext_id;
 	guint32 unknown4;
 	guint8 unknown1;
 	gint bytes, num;
@@ -286,7 +287,8 @@
 
 void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *gc)
 {
-	guint32 room_id, member_uid;
+	guint32 room_id;
+	UID member_uid;
 	guint8 unknown;
 	gint bytes, num;
 	qq_room_data *rmd;
@@ -334,7 +336,8 @@
 {
 	gint bytes;
 	gint num;
-	guint32 id, member_uid;
+	guint32 id;
+	UID member_uid;
 	guint16 unknown;
 	qq_room_data *rmd;
 	qq_buddy_data *bd;
--- a/libpurple/protocols/qq/group_info.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_info.h	Sun Mar 13 18:14:04 2011 +0000
@@ -34,7 +34,7 @@
 	QQ_ROOM_INFO_DISPLAY
 };
 
-gint qq_request_room_get_buddies(PurpleConnection *gc, guint32 room_id, guint32 update_class);
+gint qq_request_room_get_buddies(PurpleConnection *gc, guint32 room_id, UPDCLS update_class);
 
 void qq_process_room_cmd_get_info(guint8 *data, gint len, guint32 action, PurpleConnection *gc);
 void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *gc);
--- a/libpurple/protocols/qq/group_internal.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_internal.c	Sun Mar 13 18:14:04 2011 +0000
@@ -207,7 +207,7 @@
 }
 
 /* find a qq_buddy_data by uid, called by im.c */
-qq_buddy_data *qq_room_buddy_find(qq_room_data *rmd, guint32 uid)
+qq_buddy_data *qq_room_buddy_find(qq_room_data *rmd, UID uid)
 {
 	GList *list;
 	qq_buddy_data *bd;
@@ -226,7 +226,7 @@
 }
 
 /* remove a qq_buddy_data by uid, called by qq_group_opt.c */
-void qq_room_buddy_remove(qq_room_data *rmd, guint32 uid)
+void qq_room_buddy_remove(qq_room_data *rmd, UID uid)
 {
 	GList *list;
 	qq_buddy_data *bd;
@@ -244,7 +244,7 @@
 	}
 }
 
-qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd, guint32 member_uid)
+qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd, UID member_uid)
 {
 	qq_buddy_data *member, *bd;
 	PurpleBuddy *buddy;
--- a/libpurple/protocols/qq/group_internal.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_internal.h	Sun Mar 13 18:14:04 2011 +0000
@@ -36,9 +36,9 @@
 void qq_room_remove(PurpleConnection *gc, guint32 id);
 void qq_room_update_chat_info(PurpleChat *chat, qq_room_data *rmd);
 
-qq_buddy_data *qq_room_buddy_find(qq_room_data *rmd, guint32 uid);
-void qq_room_buddy_remove(qq_room_data *rmd, guint32 uid);
-qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd, guint32 member_uid);
+qq_buddy_data *qq_room_buddy_find(qq_room_data *rmd, UID uid);
+void qq_room_buddy_remove(qq_room_data *rmd, UID uid);
+qq_buddy_data *qq_room_buddy_find_or_new(PurpleConnection *gc, qq_room_data *rmd, UID member_uid);
 
 void qq_room_data_initial(PurpleConnection *gc);
 void qq_room_data_free_all(PurpleConnection *gc);
--- a/libpurple/protocols/qq/group_join.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_join.c	Sun Mar 13 18:14:04 2011 +0000
@@ -155,7 +155,7 @@
 }
 
 void qq_send_cmd_group_auth(PurpleConnection *gc, qq_room_data *rmd,
-		guint8 opt, guint32 uid, const gchar *reason_utf8)
+		guint8 opt, UID uid, const gchar *reason_utf8)
 {
 	guint8 raw_data[MAX_PACKET_SIZE - 16];
 	gint bytes;
--- a/libpurple/protocols/qq/group_join.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/group_join.h	Sun Mar 13 18:14:04 2011 +0000
@@ -49,7 +49,7 @@
 void qq_request_room_search(PurpleConnection *gc, guint32 ext_id, int action);
 void qq_process_room_search(PurpleConnection *gc, guint8 *data, gint len, guint32 ship32);
 
-void qq_send_cmd_group_auth(PurpleConnection *gc, qq_room_data *rmd, guint8 opt, guint32 uid, const gchar *reason_utf8);
+void qq_send_cmd_group_auth(PurpleConnection *gc, qq_room_data *rmd, guint8 opt, UID uid, const gchar *reason_utf8);
 void qq_group_join(PurpleConnection *gc, GHashTable *data);
 void qq_request_room_join(PurpleConnection *gc, qq_room_data *rmd);
 void qq_room_quit(PurpleConnection *gc, guint32 room_id);
@@ -57,3 +57,4 @@
 void qq_process_group_cmd_join_group_auth(guint8 *data, gint len, PurpleConnection *gc);
 void qq_process_group_cmd_join_group(guint8 *data, gint len, PurpleConnection *gc);
 #endif
+
--- a/libpurple/protocols/qq/im.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/im.c	Sun Mar 13 18:14:04 2011 +0000
@@ -67,15 +67,14 @@
 	QQ_NORMAL_IM_FILE_EX_NOTIFY_IP = 0x87
 };
 
-typedef struct _qq_im_header qq_im_header;
-struct _qq_im_header {
+typedef struct _qq_im_header {
 	/* this is the common part of normal_text */
 	guint16 version_from;
-	guint32 uid_from;
-	guint32 uid_to;
+	UID uid_from;
+	UID uid_to;
 	guint8 session_md5[QQ_KEY_LENGTH];
 	guint16 im_type;
-};
+} qq_im_header;
 
 /* read the common parts of the normal_im,
  * returns the bytes read if succeed, or -1 if there is any error */
@@ -93,11 +92,10 @@
 	return bytes;
 }
 
-typedef struct _qq_emoticon qq_emoticon;
-struct _qq_emoticon {
+typedef struct _qq_emoticon {
 	guint8 symbol;
 	gchar *name;
-};
+} qq_emoticon;
 
 static gboolean emoticons_is_sorted = FALSE;
 /* Map for purple smiley convert to qq, need qsort */
@@ -528,7 +526,8 @@
 qq_im_format *qq_im_fmt_new(void)
 {
 	qq_im_format *fmt;
-	const gchar simsun[] = { 0xcb, 0xce, 0xcc, 0xe5, 0};	/* simsun in Chinese */
+	/* '0xcb, 0xce, 0xcc, 0xe5' means Chinese '絎�篏�' in utf8 */
+	const gchar simsun[] = { 0xcb, 0xce, 0xcc, 0xe5, 0};
 
 	fmt = g_new0(qq_im_format, 1);
 	memset(fmt, 0, sizeof(qq_im_format));
@@ -541,6 +540,17 @@
 	return fmt;
 }
 
+void qq_im_fmt_reset_font(qq_im_format *fmt)
+{
+	const gchar simsun[] = {0xcb, 0xce, 0xcc, 0xe5, 0x00};
+	g_return_if_fail(NULL != fmt);
+
+	if (NULL != fmt->font) {
+		g_free(fmt->font);
+		fmt->font = g_strdup(simsun);
+	}
+}
+
 qq_im_format *qq_im_fmt_new_by_purple(const gchar *msg)
 {
 	qq_im_format *fmt;
@@ -1036,7 +1046,7 @@
 }
 
 /* send an IM to uid_to */
-static void request_send_im(PurpleConnection *gc, guint32 uid_to, gint type,
+static void request_send_im(PurpleConnection *gc, UID uid_to, gint type,
 	qq_im_format *fmt, gchar *msg, guint8 id, guint8 frag_count, guint8 frag_index)
 {
 	qq_data *qd;
@@ -1241,7 +1251,7 @@
 gint qq_send_im(PurpleConnection *gc, const gchar *who, const gchar *what, PurpleMessageFlags flags)
 {
 	qq_data *qd;
-	guint32 uid_to;
+	UID uid_to;
 	gint type;
 	qq_im_format *fmt;
 	gchar *msg_stripped, *tmp;
--- a/libpurple/protocols/qq/im.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/im.h	Sun Mar 13 18:14:04 2011 +0000
@@ -49,6 +49,10 @@
 };
 
 typedef struct {
+	/* attr:
+		bit0-4 for font size, bit5 for bold,
+		bit6 for italic, bit7 for underline
+	*/
 	guint8 attr;
 	guint8 rgb[3];
 	guint16 charset;
@@ -61,6 +65,7 @@
 
 qq_im_format *qq_im_fmt_new(void);
 void qq_im_fmt_free(qq_im_format *fmt);
+void qq_im_fmt_reset_font(qq_im_format *fmt);
 qq_im_format *qq_im_fmt_new_by_purple(const gchar *msg);
 gchar *qq_im_fmt_to_purple(qq_im_format *fmt, gchar *text);
 gboolean qq_im_smiley_none(const gchar *msg);
--- a/libpurple/protocols/qq/qq.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq.c	Sun Mar 13 18:14:04 2011 +0000
@@ -173,6 +173,13 @@
 	qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE);
 	qd->is_show_chat = purple_account_get_bool(account, "show_chat", TRUE);
 
+	if (purple_account_get_bool(account, "default_font", FALSE)) {
+		qd->custom = QQ_CUSTOM_USE_DEFAULT_FONT;
+	}
+	else {
+		qd->custom = QQ_CUSTOM_NONE;
+	}
+
 	qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times");
 	if (qd->resend_times <= 1) qd->itv_config.resend = 4;
 
@@ -443,7 +450,7 @@
 /* send packet to get who's detailed information */
 static void qq_show_buddy_info(PurpleConnection *gc, const gchar *who)
 {
-	guint32 uid;
+	UID uid;
 	qq_data *qd;
 
 	qd = gc->proto_data;
@@ -823,7 +830,7 @@
 	PurpleBuddy *buddy;
 	qq_buddy_data *bd;
 	PurpleConnection *gc;
-	guint32 bd_uid;
+	UID bd_uid;
 
 	g_return_if_fail(PURPLE_BLIST_NODE_IS_BUDDY(node));
 
@@ -927,7 +934,7 @@
 {
 	qq_data *qd;
 	gchar *uid_str;
-	guint32 uid;
+	UID uid;
 
 	purple_debug_info("QQ", "Get chat buddy info of %s\n", who);
 	g_return_if_fail(who != NULL);
@@ -1142,6 +1149,9 @@
 	option = purple_account_option_bool_new(_("Show chat room when msg comes"), "show_chat", TRUE);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
+	option = purple_account_option_bool_new(_("Use default font"), "default_font", FALSE);
+	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
+
 	option = purple_account_option_int_new(_("Keep alive interval (seconds)"), "keep_alive_interval", 60);
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
 
--- a/libpurple/protocols/qq/qq.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq.h	Sun Mar 13 18:14:04 2011 +0000
@@ -39,22 +39,19 @@
 #define qq_strlen(s) ((s)!=NULL?strlen(s):0)
 #define qq_strcmp(s1,s2) ((s1)!=NULL && (s2)!=NULL?strcmp(s1,s2):0)
 
-typedef struct _qq_data qq_data;
-typedef struct _qq_buddy_data qq_buddy_data;
-typedef struct _qq_interval qq_interval;
-typedef struct _qq_net_stat qq_net_stat;
-typedef struct _qq_login_data qq_login_data;
-typedef struct _qq_captcha_data qq_captcha_data;
+/* business logic layer */
+typedef guint32 UPDCLS;
+typedef guint32 UID;
 
-struct _qq_captcha_data {
+typedef struct _qq_captcha_data {
 	guint8 *token;
 	guint16 token_len;
 	guint8 next_index;
 	guint8 *data;
 	guint16 data_len;
-};
+} qq_captcha_data;
 
-struct _qq_login_data {
+typedef struct _qq_login_data {
 	guint8 random_key[QQ_KEY_LENGTH];			/* first encrypt key generated by client */
 	guint8 *token;				/* get from server */
 	guint8 token_len;
@@ -67,24 +64,24 @@
 	guint8 *login_token;
 	guint16 login_token_len;
 	guint8 login_key[QQ_KEY_LENGTH];
-};
+} qq_login_data;
 
-struct _qq_interval {
+typedef struct _qq_interval {
 	gint resend;
 	gint keep_alive;
 	gint update;
-};
+} qq_interval;
 
-struct _qq_net_stat {
+typedef struct _qq_net_stat {
 	glong sent;
 	glong resend;
 	glong lost;
 	glong rcved;
 	glong rcved_dup;
-};
+} qq_net_stat;
 
-struct _qq_buddy_data {
-	guint32 uid;
+typedef struct _qq_buddy_data {
+	UID uid;
 	guint16 face;		/* index: 0 - 299 */
 	guint8 age;
 	guint8 gender;
@@ -104,7 +101,7 @@
 	gchar** memo;
 
 	gint8  role;		/* role in group, used only in group->members list */
-};
+} qq_buddy_data;
 
 typedef struct _qq_connection qq_connection;
 struct _qq_connection {
@@ -118,7 +115,7 @@
 	int tcp_rxlen;
 };
 
-struct _qq_data {
+typedef struct _qq_data {
 	PurpleConnection *gc;
 
 	GSList *openconns;
@@ -153,7 +150,7 @@
 
 	GList *transactions;	/* check ack packet and resend */
 
-	guint32 uid;			/* QQ number */
+	UID uid;			/* QQ number */
 
 	qq_login_data ld;
 	qq_captcha_data captcha;
@@ -187,8 +184,9 @@
 	gboolean is_show_notice;
 	gboolean is_show_news;
 	gboolean is_show_chat;
+	guint32 custom;
 
 	guint16 send_im_id;		/* send IM sequence number */
-};
+} qq_data;
 
 #endif
--- a/libpurple/protocols/qq/qq_base.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_base.c	Sun Mar 13 18:14:04 2011 +0000
@@ -42,7 +42,7 @@
 #include "utils.h"
 
 /* generate a md5 key using uid and session_key */
-static void get_session_md5(guint8 *session_md5, guint32 uid, guint8 *session_key)
+static void get_session_md5(guint8 *session_md5, UID uid, guint8 *session_key)
 {
 	guint8 src[QQ_KEY_LENGTH + QQ_KEY_LENGTH];
 	gint bytes = 0;
@@ -60,7 +60,7 @@
 	gint bytes;
 
 	guint8 ret;
-	guint32 uid;
+	UID uid;
 	struct in_addr ip;
 	guint16 port;
 	struct tm *tm_local;
@@ -151,7 +151,7 @@
 	gint bytes;
 	struct {
 		guint8 result;
-		guint32 uid;
+		UID uid;
 		struct in_addr new_server_ip;
 		guint16 new_server_port;
 	} packet;
@@ -1236,7 +1236,7 @@
 	qq_data *qd;
 	gint bytes;
 	guint8 ret;
-	guint32 uid;
+	UID uid;
 	gchar *error;
 	gchar *msg;
 	gchar *msg_utf8;
@@ -1427,7 +1427,7 @@
 	qq_data *qd;
 	gint bytes;
 	guint8 ret;
-	guint32 uid;
+	UID uid;
 	gchar *error;
 	gchar *msg;
 	gchar *msg_utf8;
--- a/libpurple/protocols/qq/qq_base.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_base.h	Sun Mar 13 18:14:04 2011 +0000
@@ -28,12 +28,12 @@
 #include <glib.h>
 #include "connection.h"
 
-#define QQ_LOGIN_REPLY_OK							0x00
+#define QQ_LOGIN_REPLY_OK				0x00
 #define QQ_LOGIN_REPLY_REDIRECT				0x01
 /* defined by myself */
 #define QQ_LOGIN_REPLY_CAPTCHA_DLG			0xfd
-#define QQ_LOGIN_REPLY_NEXT_TOKEN_EX		0xfe
-#define QQ_LOGIN_REPLY_ERR							0xff
+#define QQ_LOGIN_REPLY_NEXT_TOKEN_EX			0xfe
+#define QQ_LOGIN_REPLY_ERR				0xff
 
 #define QQ_LOGIN_MODE_NORMAL		0x0a
 #define QQ_LOGIN_MODE_AWAY	    	0x1e
@@ -76,3 +76,4 @@
 void qq_request_login_2008(PurpleConnection *gc);
 guint8 qq_process_login_2008( PurpleConnection *gc, guint8 *data, gint data_len);
 #endif
+
--- a/libpurple/protocols/qq/qq_define.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_define.c	Sun Mar 13 18:14:04 2011 +0000
@@ -118,6 +118,8 @@
 		return "QQMac 1.0 preview1 build 670";
 	case QQ_CLIENT_1441:
 		return "QQ2009 preview2";
+	case QQ_CLIENT_1663:
+		return "QQ2009";
 	case QQ_SERVER_0100:
 		return "QQ Server 0100";
 	default:
--- a/libpurple/protocols/qq/qq_define.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_define.h	Sun Mar 13 18:14:04 2011 +0000
@@ -35,7 +35,9 @@
 
 #define QQ_CLIENT_0D55 0x0d55	/* QQ2005 used by openq before */
 #define QQ_CLIENT_111D 0x111D	/* QQ2007 */
-#define QQ_CLIENT_115B 0x115B	/* QQ2008 He Sui*/
+#define QQ_CLIENT_115B 0x115B	/* QQ2008 He Sui */
+#define QQ_CLIENT_1663 0x1663	/* QQ2009 Release */
+#define QQ_CLIENT_1801 0x1801	/* QQ2009 International Beta1 */
 
 const gchar *qq_get_ver_desc(gint source);
 
--- a/libpurple/protocols/qq/qq_network.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_network.c	Sun Mar 13 18:14:04 2011 +0000
@@ -42,11 +42,11 @@
 #define QQ_DEFAULT_PORT					8000
 
 /* set QQ_CONNECT_MAX to 1, when test reconnecting */
-#define QQ_CONNECT_MAX						3
+#define QQ_CONNECT_MAX				3
 #define QQ_CONNECT_INTERVAL			2
-#define QQ_CONNECT_CHECK					5
-#define QQ_KEEP_ALIVE_INTERVAL		60
-#define QQ_TRANS_INTERVAL				10
+#define QQ_CONNECT_CHECK			5
+#define QQ_KEEP_ALIVE_INTERVAL			60
+#define QQ_TRANS_INTERVAL			10
 
 gboolean connect_to_server(PurpleConnection *gc, gchar *server, gint port);
 
@@ -63,6 +63,7 @@
 
 static qq_connection *connection_create(qq_data *qd, int fd) {
 	qq_connection *ret = g_new0(qq_connection, 1);
+	g_return_val_if_fail(ret != NULL, NULL);
 	ret->fd = fd;
 	qd->openconns = g_slist_append(qd->openconns, ret);
 	return ret;
@@ -268,7 +269,7 @@
 	guint16 seq;		/* May be ack_seq or send_seq, depends on cmd */
 	guint8 room_cmd;
 	guint32 room_id;
-	guint32 update_class;
+	UPDCLS update_class;
 	guint32 ship32;
 	int ret;
 
@@ -772,9 +773,14 @@
 	}
 
 	/* _qq_show_socket("Got login socket", source); */
+	/* ok, already connected to the server */
 	qd->fd = source;
 	conn = connection_create(qd, source);
+	g_return_if_fail( conn != NULL );
+
 	if (qd->use_tcp) {
+		/* events which match "PURPLE_INPUT_READ" of
+		 * "source" would trigger the callback function */
 		conn->input_handler = purple_input_add(source, PURPLE_INPUT_READ, tcp_pending, gc);
 	} else {
 		conn->input_handler = purple_input_add(source, PURPLE_INPUT_READ, udp_pending, gc);
@@ -1131,7 +1137,7 @@
 /* Encrypt data with session_key, and send packet out */
 static gint send_cmd_detail(PurpleConnection *gc, guint16 cmd, guint16 seq,
 	guint8 *data, gint data_len, gboolean is_save2trans,
-        guint32 update_class, guint32 ship32)
+        UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 	guint8 *encrypted;
@@ -1161,7 +1167,7 @@
 }
 
 gint qq_send_cmd_mess(PurpleConnection *gc, guint16 cmd, guint8 *data, gint data_len,
-		guint32 update_class, guint32 ship32)
+		UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 	guint16 seq;
@@ -1235,7 +1241,7 @@
 }
 
 static gint send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
-		guint8 *data, gint data_len, guint32 update_class, guint32 ship32)
+		guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 	guint8 *buf;
@@ -1289,7 +1295,7 @@
 }
 
 gint qq_send_room_cmd_mess(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
-		guint8 *data, gint data_len, guint32 update_class, guint32 ship32)
+		guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32)
 {
 	g_return_val_if_fail(room_cmd > 0, -1);
 	return send_room_cmd(gc, room_cmd, room_id, data, data_len, update_class, ship32);
--- a/libpurple/protocols/qq/qq_network.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_network.h	Sun Mar 13 18:14:04 2011 +0000
@@ -39,7 +39,7 @@
 		guint8 *encrypted_data, gint encrypted_len, gboolean is_save2trans);
 gint qq_send_cmd(PurpleConnection *gc, guint16 cmd, guint8 *data, gint datalen);
 gint qq_send_cmd_mess(PurpleConnection *gc, guint16 cmd, guint8 *data, gint data_len,
-		guint32 update_class, guint32 ship32);
+		UPDCLS update_class, guint32 ship32);
 
 gint qq_send_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq,
 		guint8 *data, gint data_len);
@@ -47,7 +47,7 @@
 gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
 		guint8 *data, gint data_len);
 gint qq_send_room_cmd_mess(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
-		guint8 *data, gint data_len, guint32 update_class, guint32 ship32);
+		guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32);
 gint qq_send_room_cmd_only(PurpleConnection *gc, guint8 room_cmd, guint32 room_id);
 gint qq_send_room_cmd_noid(PurpleConnection *gc, guint8 room_cmd,
 		guint8 *data, gint data_len);
--- a/libpurple/protocols/qq/qq_process.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_process.c	Sun Mar 13 18:14:04 2011 +0000
@@ -254,8 +254,8 @@
 	gint bytes;
 
 	struct {
-		guint32 uid_from;
-		guint32 uid_to;
+		UID uid_from;
+		UID uid_to;
 		guint32 seq;
 		struct in_addr ip_from;
 		guint16 port_from;
@@ -725,7 +725,7 @@
 
 void qq_proc_room_cmds(PurpleConnection *gc, guint16 seq,
 		guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len,
-		guint32 update_class, guint32 ship32)
+		UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 	guint8 *data;
@@ -861,7 +861,7 @@
 }
 
 guint8 qq_proc_login_cmds(PurpleConnection *gc,  guint16 cmd, guint16 seq,
-		guint8 *rcved, gint rcved_len, guint32 update_class, guint32 ship32)
+		guint8 *rcved, gint rcved_len, UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 	guint8 *data = NULL;
@@ -1013,7 +1013,7 @@
 }
 
 void qq_proc_client_cmds(PurpleConnection *gc, guint16 cmd, guint16 seq,
-		guint8 *rcved, gint rcved_len, guint32 update_class, guint32 ship32)
+		guint8 *rcved, gint rcved_len, UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd;
 
--- a/libpurple/protocols/qq/qq_process.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_process.h	Sun Mar 13 18:14:04 2011 +0000
@@ -39,12 +39,12 @@
 };
 
 guint8 qq_proc_login_cmds(PurpleConnection *gc,  guint16 cmd, guint16 seq,
-		guint8 *rcved, gint rcved_len, guint32 update_class, guint32 ship32);
+		guint8 *rcved, gint rcved_len, UPDCLS update_class, guint32 ship32);
 void qq_proc_client_cmds(PurpleConnection *gc, guint16 cmd, guint16 seq,
-		guint8 *rcved, gint rcved_len, guint32 update_class, guint32 ship32);
+		guint8 *rcved, gint rcved_len, UPDCLS update_class, guint32 ship32);
 void qq_proc_room_cmds(PurpleConnection *gc, guint16 seq,
 		guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len,
-		guint32 update_class, guint32 ship32);
+		UPDCLS update_class, guint32 ship32);
 
 void qq_proc_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len);
 
--- a/libpurple/protocols/qq/qq_trans.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_trans.c	Sun Mar 13 18:14:04 2011 +0000
@@ -42,25 +42,6 @@
 	QQ_TRANS_IS_REPLY = 0x08				/* server command before login*/
 };
 
-struct _qq_transaction {
-	guint8 flag;
-	guint16 seq;
-	guint16 cmd;
-
-	guint8 room_cmd;
-	guint32 room_id;
-
-	guint8 *data;
-	gint data_len;
-
-	gint fd;
-	gint send_retries;
-	gint rcved_times;
-	gint scan_times;
-
-	guint32 update_class;
-	guint32 ship32;
-};
 
 gboolean qq_trans_is_server(qq_transaction *trans)
 {
@@ -107,7 +88,7 @@
 }
 
 static qq_transaction *trans_create(PurpleConnection *gc, gint fd,
-	guint16 cmd, guint16 seq, guint8 *data, gint data_len, guint32 update_class, guint32 ship32)
+	guint16 cmd, guint16 seq, guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32)
 {
 	qq_transaction *trans;
 
@@ -178,7 +159,7 @@
 }
 
 void qq_trans_add_client_cmd(PurpleConnection *gc,
-	guint16 cmd, guint16 seq, guint8 *data, gint data_len, guint32 update_class, guint32 ship32)
+	guint16 cmd, guint16 seq, guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd = (qq_data *)gc->proto_data;
 	qq_transaction *trans = trans_create(gc, qd->fd, cmd, seq, data, data_len, update_class, ship32);
@@ -218,7 +199,7 @@
 
 void qq_trans_add_room_cmd(PurpleConnection *gc,
 		guint16 seq, guint8 room_cmd, guint32 room_id, guint8 *data, gint data_len,
-		guint32 update_class, guint32 ship32)
+		UPDCLS update_class, guint32 ship32)
 {
 	qq_data *qd = (qq_data *)gc->proto_data;
 	qq_transaction *trans = trans_create(gc, qd->fd, QQ_CMD_ROOM, seq, data, data_len,
--- a/libpurple/protocols/qq/qq_trans.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/qq_trans.h	Sun Mar 13 18:14:04 2011 +0000
@@ -28,7 +28,25 @@
 #include <glib.h>
 #include "qq.h"
 
-typedef struct _qq_transaction qq_transaction;
+typedef struct _qq_transaction {
+	guint8 flag;
+	guint16 seq;
+	guint16 cmd;
+
+	guint8 room_cmd;
+	guint32 room_id;
+
+	guint8 *data;
+	gint data_len;
+
+	gint fd;
+	gint send_retries;
+	gint rcved_times;
+	gint scan_times;
+
+	UPDCLS update_class;
+	guint32 ship32;
+} qq_transaction;
 
 qq_transaction *qq_trans_find_rcved(PurpleConnection *gc, guint16 cmd, guint16 seq);
 gboolean qq_trans_is_server(qq_transaction *trans) ;
@@ -39,10 +57,10 @@
 guint32 qq_trans_get_ship(qq_transaction *trans);
 
 void qq_trans_add_client_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
-		guint8 *data, gint data_len, guint32 update_class, guint32 ship32);
+		guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32);
 void qq_trans_add_room_cmd(PurpleConnection *gc,
 		guint16 seq, guint8 room_cmd, guint32 room_id,
-		guint8 *data, gint data_len, guint32 update_class, guint32 ship32);
+		guint8 *data, gint data_len, UPDCLS update_class, guint32 ship32);
 void qq_trans_add_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
 	guint8 *rcved, gint rcved_len);
 void qq_trans_add_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq,
--- a/libpurple/protocols/qq/send_file.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/send_file.c	Sun Mar 13 18:14:04 2011 +0000
@@ -278,7 +278,7 @@
 
 /* fill in the common information of file transfer */
 static gint _qq_create_packet_file_header
-(guint8 *raw_data, guint32 to_uid, guint16 message_type, qq_data *qd, gboolean seq_ack)
+(guint8 *raw_data, UID to_uid, guint16 message_type, qq_data *qd, gboolean seq_ack)
 {
 	gint bytes;
 	time_t now;
@@ -430,7 +430,7 @@
 }
 
 /* create the QQ_FILE_TRANS_REQ packet with file infomations */
-static void _qq_send_packet_file_request (PurpleConnection *gc, guint32 to_uid, gchar *filename, gint filesize)
+static void _qq_send_packet_file_request (PurpleConnection *gc, UID to_uid, gchar *filename, gint filesize)
 {
 	qq_data *qd;
 	guint8 *raw_data;
@@ -482,7 +482,7 @@
 }
 
 /* tell the buddy we want to accept the file */
-static void _qq_send_packet_file_accept(PurpleConnection *gc, guint32 to_uid)
+static void _qq_send_packet_file_accept(PurpleConnection *gc, UID to_uid)
 {
 	qq_data *qd;
 	guint8 *raw_data;
@@ -520,7 +520,7 @@
 			    packet_len, bytes);
 }
 
-static void _qq_send_packet_file_notifyip(PurpleConnection *gc, guint32 to_uid)
+static void _qq_send_packet_file_notifyip(PurpleConnection *gc, UID to_uid)
 {
 	PurpleXfer *xfer;
 	ft_info *info;
@@ -552,7 +552,7 @@
 }
 
 /* tell the buddy we don't want the file */
-static void _qq_send_packet_file_reject (PurpleConnection *gc, guint32 to_uid)
+static void _qq_send_packet_file_reject (PurpleConnection *gc, UID to_uid)
 {
 	qq_data *qd;
 	guint8 *raw_data;
@@ -576,7 +576,7 @@
 }
 
 /* tell the buddy to cancel transfer */
-static void _qq_send_packet_file_cancel (PurpleConnection *gc, guint32 to_uid)
+static void _qq_send_packet_file_cancel (PurpleConnection *gc, UID to_uid)
 {
 	qq_data *qd;
 	guint8 *raw_data;
@@ -611,7 +611,7 @@
 {
 	PurpleConnection *gc;
 	PurpleAccount *account;
-	guint32 to_uid;
+	UID to_uid;
 	const gchar *filename;
 	gchar *base_filename;
 
@@ -678,7 +678,7 @@
 
 /* process reject im for file transfer request */
 void qq_process_recv_file_reject (guint8 *data, gint data_len,
-		guint32 sender_uid, PurpleConnection *gc)
+		UID sender_uid, PurpleConnection *gc)
 {
 	gchar *msg, *filename;
 	qq_data *qd;
@@ -708,7 +708,7 @@
 
 /* process cancel im for file transfer request */
 void qq_process_recv_file_cancel (guint8 *data, gint data_len,
-		guint32 sender_uid, PurpleConnection *gc)
+		UID sender_uid, PurpleConnection *gc)
 {
 	gchar *msg, *filename;
 	qq_data *qd;
@@ -738,7 +738,7 @@
 }
 
 /* process accept im for file transfer request */
-void qq_process_recv_file_accept(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc)
+void qq_process_recv_file_accept(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc)
 {
 	qq_data *qd;
 	gint bytes;
@@ -764,7 +764,7 @@
 }
 
 /* process request from buddy's im for file transfer request */
-void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection * gc)
+void qq_process_recv_file_request(guint8 *data, gint data_len, UID sender_uid, PurpleConnection * gc)
 {
 	qq_data *qd;
 	PurpleXfer *xfer;
@@ -874,7 +874,7 @@
 }
 
 void qq_process_recv_file_notify(guint8 *data, gint data_len,
-		guint32 sender_uid, PurpleConnection *gc)
+		UID sender_uid, PurpleConnection *gc)
 {
 	gint bytes;
 	qq_data *qd;
--- a/libpurple/protocols/qq/send_file.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/send_file.h	Sun Mar 13 18:14:04 2011 +0000
@@ -29,7 +29,7 @@
 #include "qq.h"
 
 typedef struct _ft_info {
-	guint32 to_uid;
+	UID to_uid;
 	guint16 send_seq;
 	guint8 file_session_key[QQ_KEY_LENGTH];
 	guint8 conn_method;
@@ -67,11 +67,11 @@
 	gboolean use_major;
 } ft_info;
 
-void qq_process_recv_file_accept(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc);
-void qq_process_recv_file_reject(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc);
-void qq_process_recv_file_cancel(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc);
-void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc);
-void qq_process_recv_file_notify(guint8 *data, gint data_len, guint32 sender_uid, PurpleConnection *gc);
+void qq_process_recv_file_accept(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc);
+void qq_process_recv_file_reject(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc);
+void qq_process_recv_file_cancel(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc);
+void qq_process_recv_file_request(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc);
+void qq_process_recv_file_notify(guint8 *data, gint data_len, UID sender_uid, PurpleConnection *gc);
 gboolean qq_can_receive_file(PurpleConnection *gc, const char *who);
 void qq_send_file(PurpleConnection *gc, const char *who, const char *file);
 gint qq_get_conn_info(ft_info *info, guint8 *data);
--- a/libpurple/protocols/qq/utils.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/utils.c	Sun Mar 13 18:14:04 2011 +0000
@@ -131,9 +131,9 @@
 }
 
 /* convert Purple name to original QQ UID */
-guint32 purple_name_to_uid(const gchar *const name)
+UID purple_name_to_uid(const gchar *const name)
 {
-	guint32 ret;
+	UID ret;
 	g_return_val_if_fail(name != NULL, 0);
 
 	ret = strtoul(name, NULL, 10);
@@ -168,7 +168,7 @@
 
 /* convert a QQ UID to a unique name of Purple
  * the return needs to be freed */
-gchar *uid_to_purple_name(guint32 uid)
+gchar *uid_to_purple_name(UID uid)
 {
 	return g_strdup_printf("%u", uid);
 }
--- a/libpurple/protocols/qq/utils.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/qq/utils.h	Sun Mar 13 18:14:04 2011 +0000
@@ -27,6 +27,7 @@
 
 #include <stdio.h>
 #include <glib.h>
+#include "qq.h"
 
 #include "debug.h"
 
@@ -40,8 +41,8 @@
 gchar *gen_ip_str(guint8 *ip);
 guint8 *str_ip_gen(gchar *str);
 
-guint32 purple_name_to_uid(const gchar *name);
-gchar *uid_to_purple_name(guint32 uid);
+UID purple_name_to_uid(const gchar *name);
+gchar *uid_to_purple_name(UID uid);
 
 gchar *try_dump_as_gbk(const guint8 *const data, gint len);
 
--- a/libpurple/protocols/silc/silc.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/silc/silc.c	Sun Mar 13 18:14:04 2011 +0000
@@ -654,6 +654,8 @@
 {
 	SilcPurple sg = (SilcPurple)context;
 
+	purple_debug_info("silc", "Finalizing SilcPurple %p\n", sg);
+
 	silc_client_stop(sg->client, NULL, NULL);
 	silc_client_free(sg->client);
 	if (sg->sha1hash)
@@ -714,6 +716,8 @@
 #endif /* __SILC_TOOLKIT_VERSION */
 
 	purple_timeout_remove(sg->scheduler);
+
+	purple_debug_info("silc", "Scheduling destruction of SilcPurple %p\n", sg);
 	purple_timeout_add(1, (GSourceFunc)silcpurple_close_final, sg);
 }
 
--- a/libpurple/protocols/yahoo/libymsg.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/protocols/yahoo/libymsg.c	Sun Mar 13 18:14:04 2011 +0000
@@ -842,7 +842,7 @@
 				break;
 		}
 
-		if (*stat == '1')
+		if (stat && *stat == '1')
 			serv_got_typing(gc, fed_from, 0, PURPLE_TYPING);
 		else
 			serv_got_typing_stopped(gc, fed_from);
@@ -864,7 +864,7 @@
 
 		yahoo_friend_set_game(f, NULL);
 
-		if (*stat == '1') {
+		if (stat && *stat == '1') {
 			yahoo_friend_set_game(f, game);
 			if (bud)
 				yahoo_update_status(gc, from, f);
@@ -922,6 +922,11 @@
 		l = l->next;
 	}
 
+	if(!sms) {
+		purple_debug_info("yahoo", "Received a malformed SMS packet!\n");
+		return;
+	}
+
 	if( (pkt->status == -1) || (pkt->status == YAHOO_STATUS_DISCONNECTED) ) {
 		if (server_msg) {
 			PurpleConversation *c;
--- a/libpurple/tests/Makefile.am	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/tests/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -11,8 +11,10 @@
 	    tests.h \
 		test_cipher.c \
 		test_jabber_caps.c \
+		test_jabber_digest_md5.c \
 		test_jabber_jutil.c \
 		test_jabber_scram.c \
+		test_oscar_util.c \
 		test_qq.c \
 		test_yahoo_util.c \
 		test_util.c \
@@ -29,6 +31,7 @@
 
 check_libpurple_LDADD=\
 		$(top_builddir)/libpurple/protocols/jabber/libjabber.la \
+		$(top_builddir)/libpurple/protocols/oscar/liboscar.la \
 		$(top_builddir)/libpurple/protocols/qq/libqq_tmp.la \
 		$(top_builddir)/libpurple/protocols/yahoo/libymsg.la \
 		$(top_builddir)/libpurple/libpurple.la \
--- a/libpurple/tests/check_libpurple.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/tests/check_libpurple.c	Sun Mar 13 18:14:04 2011 +0000
@@ -85,8 +85,10 @@
 
 	srunner_add_suite(sr, cipher_suite());
 	srunner_add_suite(sr, jabber_caps_suite());
+	srunner_add_suite(sr, jabber_digest_md5_suite());
 	srunner_add_suite(sr, jabber_jutil_suite());
 	srunner_add_suite(sr, jabber_scram_suite());
+	srunner_add_suite(sr, oscar_util_suite());
 	srunner_add_suite(sr, qq_suite());
 	srunner_add_suite(sr, yahoo_util_suite());
 	srunner_add_suite(sr, util_suite());
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/tests/test_jabber_digest_md5.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,59 @@
+#include <string.h>
+
+#include "tests.h"
+#include "../util.h"
+#include "../protocols/jabber/auth_digest_md5.h"
+#include "../protocols/jabber/jutil.h"
+
+START_TEST(test_parsing)
+{
+	GHashTable *table;
+
+	table = jabber_auth_digest_md5_parse("r=\"realm\",token=   \"   asdf\"");
+	fail_if(g_hash_table_lookup(table, "r") == NULL);
+	assert_string_equal("realm", g_hash_table_lookup(table, "r"));
+	fail_if(g_hash_table_lookup(table, "token") == NULL);
+	assert_string_equal("asdf", g_hash_table_lookup(table, "token"));
+	g_hash_table_destroy(table);
+
+	table = jabber_auth_digest_md5_parse("r=\"a\", token=   \"   asdf\"");
+	fail_if(g_hash_table_lookup(table, "r") == NULL);
+	assert_string_equal("a", g_hash_table_lookup(table, "r"));
+	fail_if(g_hash_table_lookup(table, "token") == NULL);
+	assert_string_equal("asdf", g_hash_table_lookup(table, "token"));
+	g_hash_table_destroy(table);
+
+	table = jabber_auth_digest_md5_parse("r=\"\", token=   \"   asdf\"");
+	fail_if(g_hash_table_lookup(table, "r") == NULL);
+	assert_string_equal("", g_hash_table_lookup(table, "r"));
+	fail_if(g_hash_table_lookup(table, "token") == NULL);
+	assert_string_equal("asdf", g_hash_table_lookup(table, "token"));
+	g_hash_table_destroy(table);
+
+	table = jabber_auth_digest_md5_parse("realm=\"somerealm\",nonce=\"OA6MG9tEQGm2hh\",qop=\"auth\",charset=utf-8,algorithm=md5-sess");
+	fail_if(g_hash_table_lookup(table, "realm") == NULL);
+	assert_string_equal("somerealm", g_hash_table_lookup(table, "realm"));
+	fail_if(g_hash_table_lookup(table, "nonce") == NULL);
+	assert_string_equal("OA6MG9tEQGm2hh", g_hash_table_lookup(table, "nonce"));
+	fail_if(g_hash_table_lookup(table, "qop") == NULL);
+	assert_string_equal("auth", g_hash_table_lookup(table, "qop"));
+	fail_if(g_hash_table_lookup(table, "charset") == NULL);
+	assert_string_equal("utf-8", g_hash_table_lookup(table, "charset"));
+	fail_if(g_hash_table_lookup(table, "algorithm") == NULL);
+	assert_string_equal("md5-sess", g_hash_table_lookup(table, "algorithm"));
+
+	g_hash_table_destroy(table);
+
+}
+END_TEST
+
+Suite *
+jabber_digest_md5_suite(void)
+{
+	Suite *s = suite_create("Jabber SASL DIGEST-MD5 functions");
+
+	TCase *tc = tcase_create("Parsing Functionality");
+	tcase_add_test(tc, test_parsing);
+	suite_add_tcase(s, tc);
+	return s;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/tests/test_oscar_util.c	Sun Mar 13 18:14:04 2011 +0000
@@ -0,0 +1,47 @@
+#include <string.h>
+
+#include "tests.h"
+#include "../protocols/oscar/oscar.h"
+
+START_TEST(test_oscar_util_name_compare)
+{
+	int i;
+	const char *good[] = {
+		"test",
+		"TEST",
+		"Test",
+		"teSt",
+		" TesT",
+		"test ",
+		"  T E   s T  "
+	};
+	const char *bad[] = {
+		"toast",
+		"test@example.com",
+		"test@aim.com"
+	};
+
+	for (i = 0; i < G_N_ELEMENTS(good); i++) {
+		ck_assert_int_eq(0, oscar_util_name_compare("test", good[i]));
+		ck_assert_int_eq(0, oscar_util_name_compare(good[i], "test"));
+	}
+	for (i = 0; i < G_N_ELEMENTS(bad); i++) {
+		ck_assert_int_ne(0, oscar_util_name_compare("test", bad[i]));
+		ck_assert_int_ne(0, oscar_util_name_compare(bad[i], "test"));
+	}
+}
+END_TEST
+
+Suite *oscar_util_suite(void)
+{
+	Suite *s;
+	TCase *tc;
+
+	s = suite_create("OSCAR Utility Functions");
+
+	tc = tcase_create("Convert IM from network format to HTML");
+	tcase_add_test(tc, test_oscar_util_name_compare);
+	suite_add_tcase(s, tc);
+
+	return s;
+}
--- a/libpurple/tests/test_util.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/tests/test_util.c	Sun Mar 13 18:14:04 2011 +0000
@@ -90,7 +90,9 @@
 	"a@singleLetterLocal.org",
 	"singleLetterDomain@x.org",
 	"&*=?^+{}'~@validCharsInLocal.net",
-	"foor@bar.newTLD"
+	"foor@bar.newTLD",
+	"HenryTheGreatWhiteCricket@live.ca",
+	"HenryThe__WhiteCricket@hotmail.com"
 };
 
 const char *invalid_emails[] = {
--- a/libpurple/tests/tests.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/tests/tests.h	Sun Mar 13 18:14:04 2011 +0000
@@ -10,8 +10,10 @@
 Suite * master_suite(void);
 Suite * cipher_suite(void);
 Suite * jabber_caps_suite(void);
+Suite * jabber_digest_md5_suite(void);
 Suite * jabber_jutil_suite(void);
 Suite * jabber_scram_suite(void);
+Suite * oscar_util_suite(void);
 Suite * qq_suite(void);
 Suite * yahoo_util_suite(void);
 Suite * util_suite(void);
--- a/libpurple/xmlnode.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/libpurple/xmlnode.c	Sun Mar 13 18:14:04 2011 +0000
@@ -606,7 +606,7 @@
 {
 	struct _xmlnode_parser_data *xpd = user_data;
 
-       	if(!element_name || !xpd->current || xpd->error)
+	if(!element_name || !xpd->current || xpd->error)
 		return;
 
 	if(xpd->current->parent) {
--- a/pidgin/Makefile.am	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/Makefile.am	Sun Mar 13 18:14:04 2011 +0000
@@ -156,7 +156,6 @@
 	$(SM_LIBS) \
 	$(INTLLIBS) \
 	$(GTKSPELL_LIBS) \
-	$(STARTUP_NOTIFICATION_LIBS) \
 	$(LIBXML_LIBS) \
 	$(GTK_LIBS) \
 	$(top_builddir)/libpurple/libpurple.la
@@ -180,7 +179,6 @@
 	$(GTK_CFLAGS) \
 	$(DBUS_CFLAGS) \
 	$(GTKSPELL_CFLAGS) \
-	$(STARTUP_NOTIFICATION_CFLAGS) \
 	$(LIBXML_CFLAGS) \
 	$(INTGG_CFLAGS)
 endif  # ENABLE_GTK
--- a/pidgin/gtkblist.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkblist.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1740,8 +1740,7 @@
 	gboolean autojoin, persistent;
 
 	menu = gtk_menu_new();
-	autojoin = (purple_blist_node_get_bool(node, "gtk-autojoin") ||
-			(purple_blist_node_get_string(node, "gtk-autojoin") != NULL));
+	autojoin = purple_blist_node_get_bool(node, "gtk-autojoin");
 	persistent = purple_blist_node_get_bool(node, "gtk-persistent");
 
 	pidgin_new_item_from_stock(menu, _("_Join"), PIDGIN_STOCK_CHAT,
@@ -7418,9 +7417,7 @@
 			if(chat->account != account)
 				continue;
 
-			if(purple_blist_node_get_bool((PurpleBlistNode*)chat, "gtk-autojoin") ||
-					(purple_blist_node_get_string((PurpleBlistNode*)chat,
-					 "gtk-autojoin") != NULL))
+			if (purple_blist_node_get_bool((PurpleBlistNode*)chat, "gtk-autojoin"))
 				serv_join_chat(gc, chat->components);
 		}
 	}
@@ -7741,7 +7738,7 @@
 		gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter);
 		return;
 	} else {
-		sort_method_none(node, blist, groupiter, cur, iter);
+		sort_method_alphabetical(node, blist, groupiter, cur, iter);
 		return;
 	}
 
--- a/pidgin/gtkconv.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkconv.c	Sun Mar 13 18:14:04 2011 +0000
@@ -78,9 +78,9 @@
 
 #define AUTO_RESPONSE "&lt;AUTO-REPLY&gt; : "
 
-typedef  enum
-{
-	PIDGIN_CONV_SET_TITLE 			= 1 << 0,
+typedef enum
+{
+	PIDGIN_CONV_SET_TITLE			= 1 << 0,
 	PIDGIN_CONV_BUDDY_ICON			= 1 << 1,
 	PIDGIN_CONV_MENU			= 1 << 2,
 	PIDGIN_CONV_TAB_ICON			= 1 << 3,
@@ -141,8 +141,6 @@
 static GList *away_list = NULL;
 static GList *busy_list = NULL;
 static GList *xa_list = NULL;
-static GList *login_list = NULL;
-static GList *logout_list = NULL;
 static GList *offline_list = NULL;
 static GHashTable *prpl_lists = NULL;
 
@@ -2192,9 +2190,9 @@
 		(event->keyval == GDK_Left) ||
 		(event->keyval == GDK_Right) ||
 		(event->keyval == GDK_Page_Up) ||
- 		(event->keyval == GDK_KP_Page_Up) ||
+		(event->keyval == GDK_KP_Page_Up) ||
 		(event->keyval == GDK_Page_Down) ||
- 		(event->keyval == GDK_KP_Page_Down) ||
+		(event->keyval == GDK_KP_Page_Down) ||
 		(event->keyval == GDK_Home) ||
 		(event->keyval == GDK_End) ||
 		(event->keyval == GDK_Tab) ||
@@ -2430,8 +2428,8 @@
 	if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
 		PurpleBuddy *b = purple_find_buddy(account, name);
 		if (b != NULL) {
-                	PurplePresence *p;
-	                p = purple_buddy_get_presence(b);
+			PurplePresence *p;
+			p = purple_buddy_get_presence(b);
 			if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AWAY))
 				return away_list;
 			if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE))
@@ -6119,7 +6117,7 @@
 
 	/* Currently GTK+ maintains our sorted list after it's in the tree.
 	 * This may change if it turns out we can manage it faster ourselves.
- 	 */
+	 */
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls),  CHAT_USERS_ALIAS_KEY_COLUMN,
 										 GTK_SORT_ASCENDING);
 }
@@ -6471,13 +6469,13 @@
 		gtk_widget_show(win->menu.get_info);
 		gtk_widget_hide(win->menu.invite);
 		gtk_widget_show(win->menu.alias);
- 		if (purple_privacy_check(account, purple_conversation_get_name(conv))) {
- 			gtk_widget_hide(win->menu.unblock);
- 			gtk_widget_show(win->menu.block);
- 		} else {
- 			gtk_widget_hide(win->menu.block);
- 			gtk_widget_show(win->menu.unblock);
- 		}
+		if (purple_privacy_check(account, purple_conversation_get_name(conv))) {
+			gtk_widget_hide(win->menu.unblock);
+			gtk_widget_show(win->menu.block);
+		} else {
+			gtk_widget_hide(win->menu.block);
+			gtk_widget_show(win->menu.unblock);
+		}
 
 		if ((account == NULL) || purple_find_buddy(account, purple_conversation_get_name(conv)) == NULL) {
 			gtk_widget_show(win->menu.add);
@@ -6698,7 +6696,7 @@
 		char *title;
 		PurpleConvIm *im = NULL;
 		PurpleAccount *account = purple_conversation_get_account(conv);
-	 	PurpleBuddy *buddy = NULL;
+		PurpleBuddy *buddy = NULL;
 		char *markup = NULL;
 		AtkObject *accessibility_obj;
 		/* I think this is a little longer than it needs to be but I'm lazy. */
@@ -7559,33 +7557,11 @@
 	}
 }
 
-struct _status_timeout_user {
-	gchar *name;
-	PurpleAccount *account;
-};
-
-static gboolean
-update_buddy_status_timeout(struct _status_timeout_user *user)
-{
-	/* To remove the signing-on/off door icon */
-	PurpleConversation *conv;
-
-	conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, user->name, user->account);
-	if (conv)
-		pidgin_conv_update_fields(conv, PIDGIN_CONV_TAB_ICON);
-
-	g_free(user->name);
-	g_free(user);
-
-	return FALSE;
-}
-
 static void
 update_buddy_status_changed(PurpleBuddy *buddy, PurpleStatus *old, PurpleStatus *newstatus)
 {
 	PidginConversation *gtkconv;
 	PurpleConversation *conv;
-	struct _status_timeout_user *user;
 
 	gtkconv = get_gtkconv_with_contact(purple_buddy_get_contact(buddy));
 	if (gtkconv)
@@ -7597,13 +7573,6 @@
 		if ((purple_status_is_online(old) ^ purple_status_is_online(newstatus)) != 0)
 			pidgin_conv_update_fields(conv, PIDGIN_CONV_MENU);
 	}
-
-	user = g_malloc(sizeof(struct _status_timeout_user));
-	user->name = g_strdup(buddy->name);
-	user->account = buddy->account;
-
-	/* In case a conversation is started after the buddy has signed-on/off */
-	purple_timeout_add_seconds(11, (GSourceFunc)update_buddy_status_timeout, user);
 }
 
 static void
@@ -9148,8 +9117,6 @@
 	available_list = make_status_icon_list(PIDGIN_STOCK_STATUS_AVAILABLE, w);
 	busy_list = make_status_icon_list(PIDGIN_STOCK_STATUS_BUSY, w);
 	xa_list = make_status_icon_list(PIDGIN_STOCK_STATUS_XA, w);
-	login_list = make_status_icon_list(PIDGIN_STOCK_STATUS_LOGIN, w);
-	logout_list = make_status_icon_list(PIDGIN_STOCK_STATUS_LOGOUT, w);
 	offline_list = make_status_icon_list(PIDGIN_STOCK_STATUS_OFFLINE, w);
 	away_list = make_status_icon_list(PIDGIN_STOCK_STATUS_AWAY, w);
 	prpl_lists = g_hash_table_new(g_str_hash, g_str_equal);
--- a/pidgin/gtkconv.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkconv.h	Sun Mar 13 18:14:04 2011 +0000
@@ -178,7 +178,11 @@
 		GList *current;
 	} attach;
 
-	/* Quick Find (since 2.7.0) */
+	/**
+	 * Quick Find.
+	 *
+	 * @since 2.7.0
+	 */
 	struct {
 		GtkWidget *entry;
 		GtkWidget *container;
--- a/pidgin/gtkdialogs.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkdialogs.c	Sun Mar 13 18:14:04 2011 +0000
@@ -650,14 +650,6 @@
 else
 	g_string_append(str, "    <b>Perl:</b> Disabled<br/>");
 
-#ifndef _WIN32
-#ifdef HAVE_STARTUP_NOTIFICATION
-	g_string_append(str, "    <b>Startup Notification:</b> Enabled<br/>");
-#else
-	g_string_append(str, "    <b>Startup Notification:</b> Disabled<br/>");
-#endif
-#endif
-
 if (purple_plugins_find_with_id("core-tcl") != NULL) {
 	g_string_append(str, "    <b>Tcl:</b> Enabled<br/>");
 #ifdef HAVE_TK
--- a/pidgin/gtkdocklet-gtk.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkdocklet-gtk.c	Sun Mar 13 18:14:04 2011 +0000
@@ -47,19 +47,37 @@
 static gboolean
 docklet_gtk_embed_timeout_cb(gpointer data)
 {
-	/* The docklet was not embedded within the timeout.
-	 * Remove it as a visibility manager, but leave the plugin
-	 * loaded so that it can embed automatically if/when a notification
-	 * area becomes available.
-	 */
-	purple_debug_info("docklet", "failed to embed within timeout\n");
-	pidgin_docklet_remove();
-	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
+#if !GTK_CHECK_VERSION(2,12,0)
+	if (gtk_status_icon_is_embedded(docklet)) {
+		/* Older GTK+ (<2.12) don't implement the embedded signal, but the
+		   information is still accessable through the above function. */
+		purple_debug_info("docklet", "embedded\n");
 
+		pidgin_docklet_embedded();
+		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", TRUE);
+	}
+	else
+#endif
+	{
+		/* The docklet was not embedded within the timeout.
+		 * Remove it as a visibility manager, but leave the plugin
+		 * loaded so that it can embed automatically if/when a notification
+		 * area becomes available.
+		 */
+		purple_debug_info("docklet", "failed to embed within timeout\n");
+		pidgin_docklet_remove();
+		purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
+	}
+
+#if GTK_CHECK_VERSION(2,12,0)
 	embed_timeout = 0;
 	return FALSE;
+#else
+	return TRUE;
+#endif
 }
 
+#if GTK_CHECK_VERSION(2,12,0)
 static gboolean
 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data)
 {
@@ -82,6 +100,7 @@
 
 	return TRUE;
 }
+#endif
 
 static void
 docklet_gtk_destroyed_cb(GtkWidget *widget, gpointer data)
@@ -206,7 +225,9 @@
 
 	g_signal_connect(G_OBJECT(docklet), "activate", G_CALLBACK(docklet_gtk_status_activated_cb), NULL);
 	g_signal_connect(G_OBJECT(docklet), "popup-menu", G_CALLBACK(docklet_gtk_status_clicked_cb), NULL);
+#if GTK_CHECK_VERSION(2,12,0)
 	g_signal_connect(G_OBJECT(docklet), "notify::embedded", G_CALLBACK(docklet_gtk_embedded_cb), NULL);
+#endif
 	g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_gtk_destroyed_cb), NULL);
 
 	gtk_status_icon_set_visible(docklet, TRUE);
@@ -226,11 +247,15 @@
 	 */
 	if (!recreate) {
 		pidgin_docklet_embedded();
+#if GTK_CHECK_VERSION(2,12,0)
 		if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) {
 			embed_timeout = purple_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
 		} else {
 			embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
 		}
+#else
+		embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
+#endif
 	}
 
 	purple_debug_info("docklet", "GTK+ created\n");
--- a/pidgin/gtkmain.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkmain.c	Sun Mar 13 18:14:04 2011 +0000
@@ -76,18 +76,6 @@
 
 #include <getopt.h>
 
-#ifdef HAVE_STARTUP_NOTIFICATION
-# define SN_API_NOT_YET_FROZEN
-# include <libsn/sn-launchee.h>
-# include <gdk/gdkx.h>
-#endif
-
-
-
-#ifdef HAVE_STARTUP_NOTIFICATION
-static SnLauncheeContext *sn_context = NULL;
-static SnDisplay *sn_display = NULL;
-#endif
 
 #ifdef HAVE_SIGNAL_H
 
@@ -472,42 +460,6 @@
 	g_free(text);
 }
 
-#ifdef HAVE_STARTUP_NOTIFICATION
-static void
-sn_error_trap_push(SnDisplay *display, Display *xdisplay)
-{
-	gdk_error_trap_push();
-}
-
-static void
-sn_error_trap_pop(SnDisplay *display, Display *xdisplay)
-{
-	gdk_error_trap_pop();
-}
-
-static void
-startup_notification_complete(void)
-{
-	Display *xdisplay;
-
-	xdisplay = GDK_DISPLAY();
-	sn_display = sn_display_new(xdisplay,
-								sn_error_trap_push,
-								sn_error_trap_pop);
-	sn_context =
-		sn_launchee_context_new_from_environment(sn_display,
-												 DefaultScreen(xdisplay));
-
-	if (sn_context != NULL)
-	{
-		sn_launchee_context_complete(sn_context);
-		sn_launchee_context_unref(sn_context);
-
-		sn_display_unref(sn_display);
-	}
-}
-#endif /* HAVE_STARTUP_NOTIFICATION */
-
 /* FUCKING GET ME A TOWEL! */
 #ifdef _WIN32
 /* suppress gcc "no previous prototype" warning */
@@ -876,6 +828,7 @@
 		dbus_connection_send_with_reply_and_block(conn, message, -1, NULL);
 		dbus_message_unref(message);
 #endif
+		gdk_notify_startup_complete();
 		purple_core_quit();
 		g_printerr(_("Exiting because another libpurple client is already running.\n"));
 #ifdef HAVE_SIGNAL_H
@@ -967,9 +920,10 @@
 		g_list_free(active_accounts);
 	}
 
-#ifdef HAVE_STARTUP_NOTIFICATION
-	startup_notification_complete();
-#endif
+	/* GTK clears the notification for us when opening the first window,
+	 * but we may have launched with only a status icon, so clear the it
+	 * just in case. */
+	gdk_notify_startup_complete();
 
 #ifdef _WIN32
 	winpidgin_post_init();
--- a/pidgin/gtkmedia.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkmedia.c	Sun Mar 13 18:14:04 2011 +0000
@@ -363,7 +363,7 @@
 		progress = gtkmedia->priv->send_progress;
 	else
 		progress = gtkmedia->priv->recv_progress;
-	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), level);
+	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), level * 5);
 }
 
 
--- a/pidgin/gtknotify.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtknotify.c	Sun Mar 13 18:14:04 2011 +0000
@@ -1578,8 +1578,15 @@
 		gtk_widget_set_sensitive(button, FALSE);
 		spec_dialog->edit_button = button;
 
-		button = gtk_dialog_add_button(GTK_DIALOG(dialog),
-						_("Dismiss"), GTK_RESPONSE_NO);
+		/* Translators: Make sure you translate "Dismiss" differently than
+		   "close"!  This string is used in the "You have pounced" dialog
+		   that appears when one of your Buddy Pounces is triggered.  In
+		   this context "Dismiss" means "I acknowledge that I've seen that
+		   this pounce was triggered--remove it from this list."  Translating
+		   it as "Remove" is acceptable if you can't think of a more precise
+		   word. */
+		button = gtk_dialog_add_button(GTK_DIALOG(dialog), _("Dismiss"),
+				GTK_RESPONSE_NO);
 		gtk_widget_set_sensitive(button, FALSE);
 		spec_dialog->dismiss_button = button;
 
--- a/pidgin/gtkutils.c	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/gtkutils.c	Sun Mar 13 18:14:04 2011 +0000
@@ -2919,7 +2919,7 @@
 	GtkComboBox *ret = NULL;
 	GtkWidget *the_entry = NULL;
 
-	ret = GTK_COMBO_BOX(gtk_combo_box_new_text());
+	ret = GTK_COMBO_BOX(gtk_combo_box_entry_new_text());
 	the_entry = gtk_entry_new();
 	gtk_container_add(GTK_CONTAINER(ret), the_entry);
 
--- a/pidgin/minidialog.h	Mon Feb 21 23:08:47 2011 +0000
+++ b/pidgin/minidialog.h	Sun Mar 13 18:14:04 2011 +0000
@@ -148,7 +148,7 @@
 
 /** Shortcut for setting a mini-dialog's custom icon via GObject properties.
  *  @param mini_dialog a mini-dialog
- *  @param icon_name   the pixbuf to use as a custom icon
+ *  @param custom_icon the pixbuf to use as a custom icon
  */
 void pidgin_mini_dialog_set_custom_icon(PidginMiniDialog *mini_dialog,
 	GdkPixbuf *custom_icon);
--- a/po/ChangeLog	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/ChangeLog	Sun Mar 13 18:14:04 2011 +0000
@@ -1,6 +1,39 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
+version 2.7.11
+	* Afrikaans translation updated (Friedel Wolff)
+	* Bengali translation updated (Jamil Ahmed)
+	* Chinese (Hong Kong) translation updated (Ambrose C. Li, Paladin R.
+	  Liu)
+	* Chinese (Simplified) translation updated (Aron Xu)
+	* Chinese (Traditional) translation updated (Ambrose C. Li, Paladin R.
+	  Liu)
+	* Czech translation updated (David Vachulka)
+	* Dutch translation updated (Gideon van Melle)
+	* Italian translation updated (Claudio Satriano)
+	* Norwegian Nynorsk translation updated (Yngve Spjeld Landro)
+	* Polish translation updated (Piotr Dr�g)
+	* Romanian translation updated (Mi�u Moldovan)
+	* Slovak translation updated (loptosko)
+	* Slovenian translation updated (Martin Srebotnjak)
+	* Ukrainian translation updated (Oleksandr Kovalenko)
+
 version 2.7.10
+	* Bengali translation updated (Jamil Ahmed)
+	* Chinese (Hong Kong) translation updated (Ambrose C. Li, Paladin R.
+	  Liu)
+	* Chinese (Traditional) translation updated (Ambrose C. Li, Paladin R.
+	  Liu)
+	* Czech translation updated (David Vachulka)
+	* Dutch translation updated (Gideon van Melle)
+	* Hebrew translation updated (Shalom Craimer)
+	* Norwegian Nynorsk translation updated (Yngve Spjeld Landro)
+	* Occitan translation updated (Yannig Marchegay)
+	* Polish translation updated (Piotr Dr�g)
+	* Romanian translation updated (Mi�u Moldovan)
+	* Russian translation updated (�仆�仂仆 弌舒仄仂�于舒仍仂于)
+	* Spanish translation updated (Javier Fern叩ndez-Sanguino Pe単a)
+	* Ukrainian translation updated (Oleksandr Kovalenko)
 
 version 2.7.9
 	* Czech translation updated (David Vachulka)
--- a/po/af.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/af.po	Sun Mar 13 18:14:04 2011 +0000
@@ -2,13 +2,13 @@
 # Copyright (C) 2006-2010
 # This file is distributed under the same license as the pidgin package.
 # Samuel Murray <afrikaans BY gmail.com>, 2007
-# F Wolff <friedel@translate.org.za>, 2006-2009, 2010.
+# F Wolff <friedel@translate.org.za>, 2006-2009, 2010, 2011.
 msgid ""
 msgstr ""
 "Project-Id-Version: 2.7.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:33-0500\n"
-"PO-Revision-Date: 2010-05-11 00:19+0200\n"
+"POT-Creation-Date: 2011-03-10 02:28-0800\n"
+"PO-Revision-Date: 2011-03-09 20:43+0200\n"
 "Last-Translator: F Wolff <friedel@translate.org.za>\n"
 "Language-Team: translate-discuss-af@lists.sourceforge.net\n"
 "Language: af\n"
@@ -16,7 +16,8 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.6.0\n"
+"X-Generator: Virtaal 0.7.0-beta4\n"
+"X-Project-Style: default\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -61,9 +62,8 @@
 msgid "Error"
 msgstr "Fout"
 
-#, fuzzy
 msgid "Account was not modified"
-msgstr "Rekening is nie bygevoeg nie"
+msgstr "Rekening is nie gewysig nie"
 
 msgid "Account was not added"
 msgstr "Rekening is nie bygevoeg nie"
@@ -2352,8 +2352,11 @@
 "Pad om die l棚ers in te stoor\n"
 "(Verskaf gerus die volledige pad)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Weier outomaties vir gebruikers wat nie in die vriendelys is nie"
+#, fuzzy
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr "Wanneer 'n versoek tot l棚eroordrag vanaf %s aankom"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2365,6 +2368,10 @@
 msgid "Create a new directory for each user"
 msgstr "Kies 'n nuwe gids vir elke gebruiker"
 
+#, fuzzy
+msgid "Escape the filenames"
+msgstr "%s het die l棚eroordrag gekanselleer"
+
 msgid "Notes"
 msgstr "Notas"
 
@@ -3205,9 +3212,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Naam"
 
@@ -3818,7 +3823,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Bediener vereis skoonteksstawing oor 'n onge谷nkripteerde stroom"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Ongeldige respons van die bediener"
 
@@ -3960,7 +3968,6 @@
 msgid "Postal Code"
 msgstr "Poskode"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Land"
 
@@ -6065,6 +6072,10 @@
 msgid "Connecting..."
 msgstr "Koppel tans..."
 
+#, fuzzy
+msgid "The Display Name you entered is too short."
+msgstr "Die naam wat gegee is, is ongeldig."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Die PIN wat gegee is, het 'n ongeldige lengte [7-10]."
 
@@ -6135,35 +6146,6 @@
 msgid "Retrieving User Information..."
 msgstr "Verkry tans gebruikerinligting..."
 
-msgid "Loading menu..."
-msgstr "Laai tans kieslys..."
-
-msgid "Status Message"
-msgstr "Statusboodskap"
-
-#, fuzzy
-msgid "Rejection Message"
-msgstr "Ontvangde boodskappe"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Versteekte nommer"
-
-#, fuzzy
-msgid "Your MXit ID..."
-msgstr "Yahoo-ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP-bediener"
-
-msgid "Connect via HTTP"
-msgstr "Koppel via HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "Aktiveer opsspring vir spatskerm"
-
 #. you were kicked
 #, fuzzy
 msgid "You have been kicked from this MultiMX."
@@ -6182,6 +6164,48 @@
 msgid "You have invited"
 msgstr "Daar is pos!"
 
+msgid "Loading menu..."
+msgstr "Laai tans kieslys..."
+
+msgid "Status Message"
+msgstr "Statusboodskap"
+
+#, fuzzy
+msgid "Rejection Message"
+msgstr "Ontvangde boodskappe"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Versteekte nommer"
+
+#, fuzzy
+msgid "No profile available"
+msgstr "Nie beskikbaar nie"
+
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "Hierdie rekening het nie e-pos geaktiveer nie."
+
+#, fuzzy
+msgid "Your MXit ID..."
+msgstr "Yahoo-ID..."
+
+#. contact is in Deleted, Rejected or None state
+#, fuzzy
+msgid "Re-Invite"
+msgstr "Nooi uit"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP-bediener"
+
+msgid "Connect via HTTP"
+msgstr "Koppel via HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "Aktiveer opsspring vir spatskerm"
+
 #, fuzzy
 msgid "Last Online"
 msgstr "Aanlyn"
@@ -7455,6 +7479,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "U is uit geselsiekamer %s ontkoppel."
 
+msgid "The new formatting is invalid."
+msgstr "Die nuwe formatering ongeldig."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "gebruikernaam-formatering kan net hoofletters en spasies verander."
+
 msgid "Pop-Up Message"
 msgstr "Opspring-boodskap"
 
@@ -7722,12 +7752,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ-privaatheidopsies"
 
-msgid "The new formatting is invalid."
-msgstr "Die nuwe formatering ongeldig."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "gebruikernaam-formatering kan net hoofletters en spasies verander."
-
 msgid "Change Address To:"
 msgstr "Verander adres na:"
 
@@ -7839,75 +7863,6 @@
 "kitsboodskapprente.  Omdat u IP-adres bekend gemaak sal word, kan dit 'n "
 "privaatheidrisiko wees."
 
-msgid "Invalid SNAC"
-msgstr "Ongeldige SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr ""
-
-msgid "Client rate limit exceeded"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr "Diens nie beskikbaar nie"
-
-msgid "Service not defined"
-msgstr "Diens nie gedefinieer nie"
-
-msgid "Obsolete SNAC"
-msgstr "Verouderde SNAC"
-
-msgid "Not supported by host"
-msgstr "Word nie deur gasheer ondersteun nie"
-
-msgid "Not supported by client"
-msgstr "Word nie deur kli谷nt ondersteun nie"
-
-msgid "Refused by client"
-msgstr "Deur kli谷nt geweier"
-
-msgid "Reply too big"
-msgstr "Antwoord te groot"
-
-msgid "Responses lost"
-msgstr "Response verloor"
-
-msgid "Request denied"
-msgstr "Versoek geweier"
-
-msgid "Busted SNAC payload"
-msgstr "Gebreekte SNAC-afvoer"
-
-msgid "Insufficient rights"
-msgstr "Onvoldoende regte"
-
-msgid "In local permit/deny"
-msgstr "In plaaslike toelaat/weier"
-
-msgid "Warning level too high (sender)"
-msgstr "Waarskuwingvlak t辿 hoog (sender)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Waarskuwingvlak te hoog (ontvanger)"
-
-msgid "User temporarily unavailable"
-msgstr "Gebruiker tydelik nie beskikbaar nie"
-
-msgid "No match"
-msgstr "Geen passing nie"
-
-msgid "List overflow"
-msgstr "Lysoorvloed"
-
-msgid "Request ambiguous"
-msgstr "Versoek dubbelsinnig"
-
-msgid "Queue full"
-msgstr "Tou vol"
-
-msgid "Not while on AOL"
-msgstr "Nie terwyl op AOL nie"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Vriendikoon"
@@ -8026,6 +7981,75 @@
 msgid "Capabilities"
 msgstr "Vermo谷ns"
 
+msgid "Invalid SNAC"
+msgstr "Ongeldige SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr ""
+
+msgid "Client rate limit exceeded"
+msgstr ""
+
+msgid "Service unavailable"
+msgstr "Diens nie beskikbaar nie"
+
+msgid "Service not defined"
+msgstr "Diens nie gedefinieer nie"
+
+msgid "Obsolete SNAC"
+msgstr "Verouderde SNAC"
+
+msgid "Not supported by host"
+msgstr "Word nie deur gasheer ondersteun nie"
+
+msgid "Not supported by client"
+msgstr "Word nie deur kli谷nt ondersteun nie"
+
+msgid "Refused by client"
+msgstr "Deur kli谷nt geweier"
+
+msgid "Reply too big"
+msgstr "Antwoord te groot"
+
+msgid "Responses lost"
+msgstr "Response verloor"
+
+msgid "Request denied"
+msgstr "Versoek geweier"
+
+msgid "Busted SNAC payload"
+msgstr "Gebreekte SNAC-afvoer"
+
+msgid "Insufficient rights"
+msgstr "Onvoldoende regte"
+
+msgid "In local permit/deny"
+msgstr "In plaaslike toelaat/weier"
+
+msgid "Warning level too high (sender)"
+msgstr "Waarskuwingvlak t辿 hoog (sender)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Waarskuwingvlak te hoog (ontvanger)"
+
+msgid "User temporarily unavailable"
+msgstr "Gebruiker tydelik nie beskikbaar nie"
+
+msgid "No match"
+msgstr "Geen passing nie"
+
+msgid "List overflow"
+msgstr "Lysoorvloed"
+
+msgid "Request ambiguous"
+msgstr "Versoek dubbelsinnig"
+
+msgid "Queue full"
+msgstr "Tou vol"
+
+msgid "Not while on AOL"
+msgstr "Nie terwyl op AOL nie"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8642,14 +8666,14 @@
 msgid "Select Server"
 msgstr "Kies bediener"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Koppel met TCP"
@@ -8663,6 +8687,10 @@
 msgid "Show chat room when msg comes"
 msgstr ""
 
+#, fuzzy
+msgid "Use default font"
+msgstr "Gebruik die stelselverstek"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Wakkerhou-interval (sekondes)"
 
@@ -12202,9 +12230,6 @@
 msgid "Fatal Error"
 msgstr "Fatale fout"
 
-msgid "bug master"
-msgstr "goggameester"
-
 msgid "artist"
 msgstr "kunstenaar"
 
@@ -12386,6 +12411,10 @@
 msgid "Maithili"
 msgstr "Swahili"
 
+#, fuzzy
+msgid "Meadow Mari"
+msgstr "Nuwe pos"
+
 msgid "Macedonian"
 msgstr "Masedonies"
 
@@ -13232,6 +13261,13 @@
 msgid "New Pounces"
 msgstr "Nuwe vriendwagte"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
 msgstr ""
 
@@ -15492,6 +15528,12 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "U het nie toestemming om hierdie toepassing te verwyder nie."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "Weier outomaties vir gebruikers wat nie in die vriendelys is nie"
+
+#~ msgid "bug master"
+#~ msgstr "goggameester"
+
 #~ msgid "Transfer was closed."
 #~ msgstr "Oordrag is gesluit."
 
--- a/po/bn.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/bn.po	Sun Mar 13 18:14:04 2011 +0000
@@ -7,14 +7,14 @@
 # Samia Niamatullah <samia@ankur.org.bd>, 2009.
 # Sadia Afroz <sadia@ankur.org.bd>, 2010.
 # Ummey Salma <snigdha@ankur.org.bd>, 2010.
-# Israt Jahan <israt@ankur.org.bd>, 2008-2009, 2010.
+# Israt Jahan <israt@ankur.org.bd>, 2008-2009, 2010, 2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: bn\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 20:34-0500\n"
-"PO-Revision-Date: 2010-12-19 13:37+0600\n"
+"POT-Creation-Date: 2011-03-10 01:22-0800\n"
+"PO-Revision-Date: 2011-03-06 13:37+0600\n"
 "Last-Translator: israt <israt@ankur.org.bd>\n"
 "Language-Team: Bengali <ankur-bd-l10n@googlegroups.com>\n"
 "Language: bn\n"
@@ -2466,8 +2466,12 @@
 "爨��爨�爨� 爨伍�爨萎�爭�爨劇Γ爭�爨� ����爨��爨�\n"
 "(爨�爨��爨�爭�爨萎� 爨�爨萎� 爨伍Ξ爭�爨��爨萎�爨� 爨��爨� 爨��爨萎Ζ爨鉦Θ 爨�爨萎�爨�)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "爨�Θ爭�爨о� 爨む�爨迦�爨�爨鉦Π 爨��爨逗Π爭�爨〝�爨� 爨��爨�Μ爨項�爨萎�爨鉦Π爭� 爨ム�爨�爭� 爨伍�爨�Ο爨酌�爨�爭�爨萎�爨�� 爨〝�爨�� 爨��爨む�爨� 爨�爨萎� 爨項Μ爭�"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"爨��爨� 爨踶�爨�爨� 爨��爨�Μ爨項�爨萎�爨鉦Π爭� 爨ム�爨�爭� 爨��爨�爨� 爨伍�爨ム�爨��爨��爨むΠ爭�爨� 爨�爨��爨萎�爨� 爨�爨伍�\n"
+" 爨�� 爨�爨�Θ爨鉦Π 爨�Θ爭�爨о� 爨む�爨迦�爨�爨鉦� *爨��爨�*:"
 
 # tithi
 msgid ""
@@ -2480,6 +2484,10 @@
 msgid "Create a new directory for each user"
 msgstr "爨��爨萎Δ爭�爨��爨� 爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨� 爨�爨��爨� 爨踶�爨�爨� 爨�Δ爭�爨� 爨÷�爨萎�爨�爭�爨�爨萎� 爨む�爨萎� 爨�爨萎� 爨項Μ爭�"
 
+# Translated by sadia
+msgid "Escape the filenames"
+msgstr "爨��爨�爨迦Θ爨鉦Ξ 爨踷�爨逗�爭� 爨��爨�爭�爨�"
+
 msgid "Notes"
 msgstr "爨��爨�"
 
@@ -3357,9 +3365,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "爨��爨萎Ε爨� 爨��爨�"
 
@@ -3993,7 +3999,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "爨踶�爨�爨� 爨踶��爭�爨萎�爨�Χ爨�Μ爨逗�爭�爨� 爨伍�爨�爭�爨萎�爨�� 爨伍�爨萎�爨〝�爨萎�爨� 爨伍Π爨�-爨�爭�爨�爭�爨伍� 爨��爨萎Ξ爨鉦Γ爭�爨�爨萎Γ 爨��爨萎Ο爨酌�爨�爨�"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "爨伍�爨萎�爨〝�爨� 爨ム�爨�爭� 爨�爨�爨鉦Π爭�爨��爨� 爨�爨む�爨むΠ"
 
@@ -4145,7 +4154,6 @@
 msgid "Postal Code"
 msgstr "爨��爨伍�爨�爨鉦Σ 爨�爭�爨�"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "爨��爨�"
 
@@ -6505,6 +6513,14 @@
 # tithi
 #
 #
+# Translated by sadia
+#, fuzzy
+msgid "The Display Name you entered is too short."
+msgstr "爨�爨�Θ爨� 爨�� 爨��爨� 爨��爨萎Μ爭�爨� 爨�爨萎�爨�爭�爨� 爨む� 爨�爨�爨鉦Π爭�爨��爨萎イ"
+
+# tithi
+#
+#
 #
 #
 # Translated by sadia
@@ -6605,6 +6621,22 @@
 msgid "Retrieving User Information..."
 msgstr "爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨� 爨むΕ爭�爨� 爨�爭�爨�爨�爭� 爨�爨�� 爨項�爭�爨�爭�..."
 
+# Kick =  爨む�爨萎Ω爭�爨�爨鉦Π
+# OR  爨�Ζ爨鉦�爨鉦Δ
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "MultiMX 爨項Δ爭� 爨�爨�Θ爨鉦�爭� 爨む�爨萎Ω爭�爨�爨鉦Π 爨�爨萎� 爨項�爭�爨�爭�爛�"
+
+msgid "was kicked"
+msgstr "爨む�爨萎Ω爭�爨�爨鉦Π 爨�爨萎� 爨項�爭�爨�爭�"
+
+msgid "_Room Name:"
+msgstr "爨�爨伍Π爭�爨� 爨��爨� (_R):"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "爨�爨�Θ爨鉦�爭� 爨�爨�Θ爭�爨む�爨萎Γ 爨�爨鉦Θ爨鉦Θ爭� 爨項�爭�爨�爭�"
+
 # Translated by sadia
 msgid "Loading menu..."
 msgstr "爨��爨�� 爨迦�爨� 爨�爨萎� 爨項�爭�爨�爭�..."
@@ -6622,10 +6654,24 @@
 msgid "Hidden Number"
 msgstr "爨迦�爨�爨鉦Θ爭� 爨伍�爨�爭�爨��"
 
+#, fuzzy
+msgid "No profile available"
+msgstr "爨�爨��爨�Ω爭�爨ム�爨�"
+
+# tithi
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "爨踶� 爨�爭�爨��爨�爨鉦�爨��爨�爨�爨逗Π 爨�爭�爨� 爨�爨��爨�爨� 爨伍�爭�爨萎�爨�� 爨��爨�爛�"
+
 # snigdha
 msgid "Your MXit ID..."
 msgstr "爨�爨�Θ爨鉦Π MXit ID..."
 
+#. contact is in Deleted, Rejected or None state
+#, fuzzy
+msgid "Re-Invite"
+msgstr "爨�爨�Θ爭�爨む�爨萎Γ 爨�爨鉦Θ爨鉦Θ"
+
 # Translated by sadia
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
@@ -6640,22 +6686,6 @@
 msgid "Enable splash-screen popup"
 msgstr "爨伍�爨��爨迦�爨��爨� 爨伍�爨�爭�爨萎�爨� 爨�Κ 爨�爨� 爨伍�爭�爨萎�爭� 爨�爨萎� 爨項Μ爭�"
 
-# Kick =  爨む�爨萎Ω爭�爨�爨鉦Π
-# OR  爨�Ζ爨鉦�爨鉦Δ
-#. you were kicked
-msgid "You have been kicked from this MultiMX."
-msgstr "MultiMX 爨項Δ爭� 爨�爨�Θ爨鉦�爭� 爨む�爨萎Ω爭�爨�爨鉦Π 爨�爨萎� 爨項�爭�爨�爭�爛�"
-
-msgid "was kicked"
-msgstr "爨む�爨萎Ω爭�爨�爨鉦Π 爨�爨萎� 爨項�爭�爨�爭�"
-
-msgid "_Room Name:"
-msgstr "爨�爨伍Π爭�爨� 爨��爨� (_R):"
-
-#. Display system message in chat window
-msgid "You have invited"
-msgstr "爨�爨�Θ爨鉦�爭� 爨�爨�Θ爭�爨む�爨萎Γ 爨�爨鉦Θ爨鉦Θ爭� 爨項�爭�爨�爭�"
-
 msgid "Last Online"
 msgstr "爨謹�爨� 爨��爨� 爨�爨�Σ爨鉦�爨��"
 
@@ -8116,6 +8146,13 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "爨�爨�Θ爨鉦�爭� %s 爨�爨÷�爨÷�爨� 爨�爨伍Π 爨ム�爨�爭� 爨��爨�爭�爨�爨逗Θ爭�爨� 爨�爨萎� 爨項Ο爨酌�爨�爭�爛�"
 
+msgid "The new formatting is invalid."
+msgstr "爨�Δ爭�爨� 爨��爨��爨��爨伍�爨� 爨�爨�爨鉦Π爭�爨��爨萎イ"
+
+# tithi
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨� 爨��爨��爨� 爨謹�爨о�爨��爨む�爨� 爨�爨�爭�爨劇Π爭�爨� 爨�爨鉦�爨� 爨踶�� 爨��爨�爨�爨� 爨�爨鉦Ο爨酌�爨� 爨�Π爨逗Μ爨萎�爨むΘ 爨�爨萎� 爨��爨��爛�"
+
 msgid "Pop-Up Message"
 msgstr "爨�Κ-爨�爨� 爨��爨萎�爨む�"
 
@@ -8416,13 +8453,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ 爨�爭�爨�Θ爭�爭�爨む�爨� 爨�爨�Χ爨�"
 
-msgid "The new formatting is invalid."
-msgstr "爨�Δ爭�爨� 爨��爨��爨��爨伍�爨� 爨�爨�爨鉦Π爭�爨��爨萎イ"
-
-# tithi
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨� 爨��爨��爨� 爨謹�爨о�爨��爨む�爨� 爨�爨�爭�爨劇Π爭�爨� 爨�爨鉦�爨� 爨踶�� 爨��爨�爨�爨� 爨�爨鉦Ο爨酌�爨� 爨�Π爨逗Μ爨萎�爨むΘ 爨�爨萎� 爨��爨��爛�"
-
 # tithi
 msgid "Change Address To:"
 msgstr "爨�爨逗�爨鉦Θ爨� 爨�Π爨逗Μ爨萎�爨むΘ 爨�爨萎�爨�:"
@@ -8546,91 +8576,6 @@
 "爨踶�爨逗Π 爨�爨��爨� 爨��爨�爨� 爨�爨��爨��爨�爨�爨鉦Π爭�爨� 爨�Η爭�爨�� 爨伍Π爨鉦Ω爨萎� 爨伍�爨��爨� 爨��爨萎Ο爨酌�爨�爨� 爨�� 爨�爨逗Θ爨� IM 爨踶� 爨�爨��爨� 爨�爨��爨� "
 "爨�爨�Χ爭�爨��爛� 爨��爨項�爨む� 爨�爨�Θ爨鉦Π IP 爨�爨逗�爨鉦Θ爨� 爨��爨萎�爨鉦Χ爨逗Δ 爨項Μ爭�, 爨む�爨� 爨踶む� 爨�爭�爨�Θ爭�爭�爨む�爭� 爨�爭�爨�爨�爨� 爨ム�爨�爨む� 爨��爨萎�爛�"
 
-msgid "Invalid SNAC"
-msgstr "爨�爨�爨鉦Π爭�爨��爨� SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "爨伍�爨萎�爨〝�爨� 爨項�爨萎�爨� 爨伍�爨�� 爨��爨萎�爭�爭� 爨�爭�爨�爭�"
-
-msgid "Client rate limit exceeded"
-msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨項�爨萎�爨� 爨伍�爨�� 爨��爨萎�爭�爭� 爨�爭�爨�爭�"
-
-msgid "Service unavailable"
-msgstr "爨伍�爨萎�爨〝�爨� 爨��爨��爨�Ξ爨鉦Θ 爨��"
-
-# tithi
-msgid "Service not defined"
-msgstr "爨伍�爨�� 爨��爨萎�爨о�爨萎�爨� 爨��"
-
-# tithi
-msgid "Obsolete SNAC"
-msgstr "爨�爨��爨萎�爨迦�爨� SNAC"
-
-# tithi
-msgid "Not supported by host"
-msgstr "爨項�爨伍�爨� 爨��爨��爨萎� 爨伍Ξ爨萎�爨ム�爨� 爨�Ο爨�"
-
-# tithi
-msgid "Not supported by client"
-msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨��爨��爨萎� 爨伍Ξ爨萎�爨ム�爨� 爨�Ο爨�"
-
-# tithi
-msgid "Refused by client"
-msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨��爨��爨萎� 爨��爨萎Δ爭�爨��爨�爭�爨��爨�"
-
-# tithi
-msgid "Reply too big"
-msgstr "爨�爨む�爨萎�爨�爭�爨� 爨�Α爨� 爨�爨む�爨むΠ"
-
-# tithi
-msgid "Responses lost"
-msgstr "爨��爨萎Δ爨逗�爭�爨萎�爭�爨� 爨項�爨萎�爨��爭� 爨�爭�爨�爭�"
-
-msgid "Request denied"
-msgstr "爨�爨��爨萎�爨� 爨��爨萎Δ爭�爨��爨�爭�爨��爨�"
-
-# tithi
-msgid "Busted SNAC payload"
-msgstr "爨��爨�Π爭�爨� SNAC 爨��爨迦�爨�"
-
-# tithi
-msgid "Insufficient rights"
-msgstr "爨�爨�Π爭�爨��爨��爨� 爨�爨о�爨�爨鉦Π"
-
-# tithi
-msgid "In local permit/deny"
-msgstr "爨伍�爨ム�爨��爨�� 爨�爨��爨�Δ爨�/爨�爨伍�爨��爨�爨鉦Π爭�"
-
-# tithi
-msgid "Warning level too high (sender)"
-msgstr "爨伍Δ爨萎�爨�爨む� 爨伍�爨むΠ 爨�爭�爨� 爨�爨�爭�爨� (爨��爨萎�爨萎�)"
-
-# tithi
-msgid "Warning level too high (receiver)"
-msgstr "爨伍Δ爨萎�爨�爨む� 爨伍�爨むΠ 爨�爭�爨� 爨�爨�爭�爨� (爨�爭�爨萎�爨項�)"
-
-# tithi
-msgid "User temporarily unavailable"
-msgstr "爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨�爭� 爨伍�爨�Ο爨酌�爨�爨〝�爨�� 爨��爨�爭�爨� 爨��爭�爨��"
-
-# tithi
-msgid "No match"
-msgstr "爨�爭�爨�� 爨��爨� 爨��爨�"
-
-# tithi
-msgid "List overflow"
-msgstr "爨迦�爨伍�爨� 爨�爨〝�爨謂��爨��爨迦�"
-
-msgid "Request ambiguous"
-msgstr "爨�爨��爨萎�爨� 爨�爨伍�爨�Ψ爭�爨�"
-
-# tithi
-msgid "Queue full"
-msgstr "爨�爨逗� 爨�Π爨逗Κ爭�爨萎�爨�"
-
-msgid "Not while on AOL"
-msgstr "AOL 爨� 爨ム�爨�爨� 爨�爨�Ω爭�爨ム�爭� 爨��"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "爨�Θ爭�爨о� 爨�爨�爨�爨�"
@@ -8767,6 +8712,91 @@
 msgid "Capabilities"
 msgstr "爨�爭�爨劇Ξ爨む�"
 
+msgid "Invalid SNAC"
+msgstr "爨�爨�爨鉦Π爭�爨��爨� SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "爨伍�爨萎�爨〝�爨� 爨項�爨萎�爨� 爨伍�爨�� 爨��爨萎�爭�爭� 爨�爭�爨�爭�"
+
+msgid "Client rate limit exceeded"
+msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨項�爨萎�爨� 爨伍�爨�� 爨��爨萎�爭�爭� 爨�爭�爨�爭�"
+
+msgid "Service unavailable"
+msgstr "爨伍�爨萎�爨〝�爨� 爨��爨��爨�Ξ爨鉦Θ 爨��"
+
+# tithi
+msgid "Service not defined"
+msgstr "爨伍�爨�� 爨��爨萎�爨о�爨萎�爨� 爨��"
+
+# tithi
+msgid "Obsolete SNAC"
+msgstr "爨�爨��爨萎�爨迦�爨� SNAC"
+
+# tithi
+msgid "Not supported by host"
+msgstr "爨項�爨伍�爨� 爨��爨��爨萎� 爨伍Ξ爨萎�爨ム�爨� 爨�Ο爨�"
+
+# tithi
+msgid "Not supported by client"
+msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨��爨��爨萎� 爨伍Ξ爨萎�爨ム�爨� 爨�Ο爨�"
+
+# tithi
+msgid "Refused by client"
+msgstr "爨�爭�爨迦�爭�爭�爨��爨� 爨��爨��爨萎� 爨��爨萎Δ爭�爨��爨�爭�爨��爨�"
+
+# tithi
+msgid "Reply too big"
+msgstr "爨�爨む�爨萎�爨�爭�爨� 爨�Α爨� 爨�爨む�爨むΠ"
+
+# tithi
+msgid "Responses lost"
+msgstr "爨��爨萎Δ爨逗�爭�爨萎�爭�爨� 爨項�爨萎�爨��爭� 爨�爭�爨�爭�"
+
+msgid "Request denied"
+msgstr "爨�爨��爨萎�爨� 爨��爨萎Δ爭�爨��爨�爭�爨��爨�"
+
+# tithi
+msgid "Busted SNAC payload"
+msgstr "爨��爨�Π爭�爨� SNAC 爨��爨迦�爨�"
+
+# tithi
+msgid "Insufficient rights"
+msgstr "爨�爨�Π爭�爨��爨��爨� 爨�爨о�爨�爨鉦Π"
+
+# tithi
+msgid "In local permit/deny"
+msgstr "爨伍�爨ム�爨��爨�� 爨�爨��爨�Δ爨�/爨�爨伍�爨��爨�爨鉦Π爭�"
+
+# tithi
+msgid "Warning level too high (sender)"
+msgstr "爨伍Δ爨萎�爨�爨む� 爨伍�爨むΠ 爨�爭�爨� 爨�爨�爭�爨� (爨��爨萎�爨萎�)"
+
+# tithi
+msgid "Warning level too high (receiver)"
+msgstr "爨伍Δ爨萎�爨�爨む� 爨伍�爨むΠ 爨�爭�爨� 爨�爨�爭�爨� (爨�爭�爨萎�爨項�)"
+
+# tithi
+msgid "User temporarily unavailable"
+msgstr "爨��爨�Μ爨項�爨萎�爨鉦Π爭�爨�爭� 爨伍�爨�Ο爨酌�爨�爨〝�爨�� 爨��爨�爭�爨� 爨��爭�爨��"
+
+# tithi
+msgid "No match"
+msgstr "爨�爭�爨�� 爨��爨� 爨��爨�"
+
+# tithi
+msgid "List overflow"
+msgstr "爨迦�爨伍�爨� 爨�爨〝�爨謂��爨��爨迦�"
+
+msgid "Request ambiguous"
+msgstr "爨�爨��爨萎�爨� 爨�爨伍�爨�Ψ爭�爨�"
+
+# tithi
+msgid "Queue full"
+msgstr "爨�爨逗� 爨�Π爨逗Κ爭�爨萎�爨�"
+
+msgid "Not while on AOL"
+msgstr "AOL 爨� 爨ム�爨�爨� 爨�爨�Ω爭�爨ム�爭� 爨��"
+
 # tithi
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
@@ -9420,16 +9450,16 @@
 msgstr "爨伍�爨萎�爨〝�爨� 爨��爨萎�爨��爨�爨�"
 
 # tithi
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 # tithi
 msgid "QQ2007"
 msgstr "QQ2007"
 
 # tithi
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "TCP 爨��爨��爨萎� 爨伍�爨��爨� 爨�爨萎� 爨項Μ爭�"
@@ -9443,6 +9473,9 @@
 msgid "Show chat room when msg comes"
 msgstr "爨��爨萎�爨む� 爨�爨伍Σ爭� 爨�爨÷�爨÷�爨� 爨�爨伍Π 爨��爨萎Ζ爨萎�爨謹�爨� 爨項Μ爭� "
 
+msgid "Use default font"
+msgstr "爨��爨萎�爨�Θ爨逗Π爭�爨о�爨萎�爨� 爨�Θ爭�爨�爭�爨� 爨��爨�Μ爨項�爨�"
+
 # fix me tithi
 msgid "Keep alive interval (seconds)"
 msgstr "爨伍�爭�爨萎�爨�� 爨萎�爨�爨鉦Π 爨伍Ξ爭�爭�爨� 爨��爨�Μ爨о�爨� (爨伍�爨�爭�爨��爨�)"
@@ -13272,10 +13305,6 @@
 msgid "Fatal Error"
 msgstr "爨��爨萎�爨む�爨�� 爨む�爨萎�爨�爨�"
 
-# tithi
-msgid "bug master"
-msgstr "爨��爨� 爨��爨伍�爨�爨鉦Π"
-
 msgid "artist"
 msgstr "爨謹�爨迦�爨��"
 
@@ -13472,6 +13501,9 @@
 msgid "Maithili"
 msgstr "爨��爨ム�爨迦�"
 
+msgid "Meadow Mari"
+msgstr "爨��爨�爨÷� 爨��爨萎�"
+
 msgid "Macedonian"
 msgstr "爨��爨��爨伍�爨÷Θ爨逗Ο爨�"
 
@@ -16808,6 +16840,13 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "爨�爨�Θ爨鉦Π 爨踶� 爨�爭�爨��爨��爨迦�爨�爭�爨謹Θ爨�爨� 爨�爨��爨��爨伍�爨� 爨�爨萎�爨� 爨�爨��爨�Δ爨� 爨��爨�爛�"
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "爨�Θ爭�爨о� 爨む�爨迦�爨�爨鉦Π 爨��爨逗Π爭�爨〝�爨� 爨��爨�Μ爨項�爨萎�爨鉦Π爭� 爨ム�爨�爭� 爨伍�爨�Ο爨酌�爨�爭�爨萎�爨�� 爨〝�爨�� 爨��爨む�爨� 爨�爨萎� 爨項Μ爭�"
+
+# tithi
+#~ msgid "bug master"
+#~ msgstr "爨��爨� 爨��爨伍�爨�爨鉦Π"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "爨�爨�-爨��爨��爨��爨� 爨��爨�爨�爨伍�爨�爭�爨萎�爨� 爨��爨��爨��爭� 爨む�爨萎�爨�爨� 爨項�爭�爨�爭�\n"
 
--- a/po/cs.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/cs.po	Sun Mar 13 18:14:04 2011 +0000
@@ -9,8 +9,8 @@
 msgstr ""
 "Project-Id-Version: pidgin VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-26 22:11-0500\n"
-"PO-Revision-Date: 2010-12-21 09:08+0100\n"
+"POT-Creation-Date: 2011-03-10 01:35-0800\n"
+"PO-Revision-Date: 2011-03-06 17:30+0100\n"
 "Last-Translator: David Vachulka <david@konstrukce-cad.com>\n"
 "Language-Team: Czech <cs@li.org>\n"
 "Language: cs\n"
@@ -2328,8 +2328,12 @@
 "Cesta, kam ukl叩dat soubory\n"
 "(Zadejte pros鱈m plnou cestu)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Automaticky odm鱈tat od u転ivatel哲, kte�鱈 nejsou na seznamu kamar叩d哲"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Kdy転 p�ijde po転adavek na p�enos souboru od n�koho,\n"
+"kdo nen鱈 v seznamu kamar叩d哲:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2342,6 +2346,9 @@
 msgid "Create a new directory for each user"
 msgstr "Vytvo�it nov箪 adres叩� pro ka転d辿ho u転ivatele"
 
+msgid "Escape the filenames"
+msgstr "Upravit jm辿na soubor哲"
+
 msgid "Notes"
 msgstr "Pozn叩mky"
 
@@ -3180,9 +3187,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "K�estn鱈 jm辿no"
 
@@ -3793,7 +3798,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Server vy転aduje textovou autentizaci v ne邸ifrovan辿m proudu"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Neplatn叩 odpov�� od serveru"
 
@@ -3934,7 +3942,6 @@
 msgid "Postal Code"
 msgstr "PS�"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Zem�"
 
@@ -6006,6 +6013,9 @@
 msgid "Connecting..."
 msgstr "P�ipojov叩n鱈..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Zadan辿 jm辿no pro zobrazen鱈 je p�鱈li邸 kr叩tk辿."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Zadan箪 PIN m叩 neplatnou d辿lku [7-10]."
 
@@ -6074,33 +6084,6 @@
 msgid "Retrieving User Information..."
 msgstr "Z鱈sk叩v叩m informace o u転ivateli..."
 
-msgid "Loading menu..."
-msgstr "Na�鱈t叩m menu..."
-
-msgid "Status Message"
-msgstr "Stavov叩 zpr叩va"
-
-msgid "Rejection Message"
-msgstr "Zam鱈tnut鱈 zpr叩vy"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Skryt辿 �鱈slo"
-
-msgid "Your MXit ID..."
-msgstr "Va邸e MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP Server"
-
-msgid "Connect via HTTP"
-msgstr "P�ipojit se pomoc鱈 HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "Povolit zobrazen鱈 spou邸t�c鱈 obrazovky"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "Byl jste vykopnut z MultiMX."
@@ -6115,6 +6098,43 @@
 msgid "You have invited"
 msgstr "P�i邸lo v叩m pozv叩n鱈"
 
+msgid "Loading menu..."
+msgstr "Na�鱈t叩m menu..."
+
+msgid "Status Message"
+msgstr "Stavov叩 zpr叩va"
+
+msgid "Rejection Message"
+msgstr "Zam鱈tnut鱈 zpr叩vy"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Skryt辿 �鱈slo"
+
+msgid "No profile available"
+msgstr "Nen鱈 dostupn箪 profil"
+
+msgid "This contact does not have a profile."
+msgstr "Tento kontakt nem叩 profil."
+
+msgid "Your MXit ID..."
+msgstr "Va邸e MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Znovu pozvat"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP Server"
+
+msgid "Connect via HTTP"
+msgstr "P�ipojit se pomoc鱈 HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "Povolit zobrazen鱈 spou邸t�c鱈 obrazovky"
+
 msgid "Last Online"
 msgstr "Naposledy p�ipojen"
 
@@ -7394,6 +7414,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Byl jste odpojen z m鱈stnosti chatu %s."
 
+msgid "The new formatting is invalid."
+msgstr "Nov辿 form叩tov叩n鱈 je neplatn辿."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "Form叩tov叩n鱈 jm辿na u転ivatele m哲転e zm�nit jen velikost p鱈smen a mezery."
+
 msgid "Pop-Up Message"
 msgstr "Vyskakovac鱈 zpr叩va"
 
@@ -7664,12 +7690,6 @@
 msgid "ICQ Privacy Options"
 msgstr "Mo転nosti soukrom鱈 ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "Nov辿 form叩tov叩n鱈 je neplatn辿."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "Form叩tov叩n鱈 jm辿na u転ivatele m哲転e zm�nit jen velikost p鱈smen a mezery."
-
 msgid "Change Address To:"
 msgstr "Zm�nit adresu na:"
 
@@ -7776,75 +7796,6 @@
 "Images. Proto転e bude odkryta va邸e IP adresa, d叩 se to pova転ovat za riziko "
 "pro soukrom鱈."
 
-msgid "Invalid SNAC"
-msgstr "Neplatn辿 SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "P�ekro�en limit pom�ru serveru"
-
-msgid "Client rate limit exceeded"
-msgstr "P�ekro�en limit pom�ru klienta"
-
-msgid "Service unavailable"
-msgstr "Slu転ba nedostupn叩"
-
-msgid "Service not defined"
-msgstr "Slu転ba nedefinov叩na"
-
-msgid "Obsolete SNAC"
-msgstr "Zastaral辿 SNAC"
-
-msgid "Not supported by host"
-msgstr "Nepodporov叩no hostitelem"
-
-msgid "Not supported by client"
-msgstr "Nepodporov叩no klientem"
-
-msgid "Refused by client"
-msgstr "Odm鱈tnuto klientem"
-
-msgid "Reply too big"
-msgstr "Odpov�� p�鱈li邸 velk叩"
-
-msgid "Responses lost"
-msgstr "Odpov�di ztraceny"
-
-msgid "Request denied"
-msgstr "Po転adavek zam鱈tnut"
-
-msgid "Busted SNAC payload"
-msgstr "Po邸kozen叩 data SNAC"
-
-msgid "Insufficient rights"
-msgstr "Nedostate�n叩 opr叩vn�n鱈"
-
-msgid "In local permit/deny"
-msgstr "V m鱈stn鱈m povolit/zak叩zat"
-
-msgid "Warning level too high (sender)"
-msgstr "Hladina varov叩n鱈 p�鱈li邸 vysok叩 (odesl叩n鱈)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Hladina varov叩n鱈 p�鱈li邸 vysok叩 (p�鱈jem)"
-
-msgid "User temporarily unavailable"
-msgstr "U転ivatel do�asn� nedostupn箪"
-
-msgid "No match"
-msgstr "貼叩dn叩 shoda"
-
-msgid "List overflow"
-msgstr "P�ete�en鱈 seznamu"
-
-msgid "Request ambiguous"
-msgstr "Po転adavek nejednozna�n箪"
-
-msgid "Queue full"
-msgstr "Fronta pln叩"
-
-msgid "Not while on AOL"
-msgstr "Ne kdy転 na AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Ikona kamar叩da"
@@ -7963,6 +7914,75 @@
 msgid "Capabilities"
 msgstr "Schopnosti"
 
+msgid "Invalid SNAC"
+msgstr "Neplatn辿 SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "P�ekro�en limit pom�ru serveru"
+
+msgid "Client rate limit exceeded"
+msgstr "P�ekro�en limit pom�ru klienta"
+
+msgid "Service unavailable"
+msgstr "Slu転ba nedostupn叩"
+
+msgid "Service not defined"
+msgstr "Slu転ba nedefinov叩na"
+
+msgid "Obsolete SNAC"
+msgstr "Zastaral辿 SNAC"
+
+msgid "Not supported by host"
+msgstr "Nepodporov叩no hostitelem"
+
+msgid "Not supported by client"
+msgstr "Nepodporov叩no klientem"
+
+msgid "Refused by client"
+msgstr "Odm鱈tnuto klientem"
+
+msgid "Reply too big"
+msgstr "Odpov�� p�鱈li邸 velk叩"
+
+msgid "Responses lost"
+msgstr "Odpov�di ztraceny"
+
+msgid "Request denied"
+msgstr "Po転adavek zam鱈tnut"
+
+msgid "Busted SNAC payload"
+msgstr "Po邸kozen叩 data SNAC"
+
+msgid "Insufficient rights"
+msgstr "Nedostate�n叩 opr叩vn�n鱈"
+
+msgid "In local permit/deny"
+msgstr "V m鱈stn鱈m povolit/zak叩zat"
+
+msgid "Warning level too high (sender)"
+msgstr "Hladina varov叩n鱈 p�鱈li邸 vysok叩 (odesl叩n鱈)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Hladina varov叩n鱈 p�鱈li邸 vysok叩 (p�鱈jem)"
+
+msgid "User temporarily unavailable"
+msgstr "U転ivatel do�asn� nedostupn箪"
+
+msgid "No match"
+msgstr "貼叩dn叩 shoda"
+
+msgid "List overflow"
+msgstr "P�ete�en鱈 seznamu"
+
+msgid "Request ambiguous"
+msgstr "Po転adavek nejednozna�n箪"
+
+msgid "Queue full"
+msgstr "Fronta pln叩"
+
+msgid "Not while on AOL"
+msgstr "Ne kdy転 na AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8552,14 +8572,14 @@
 msgid "Select Server"
 msgstr "Vyberte server"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "P�ipojit se pomoc鱈 TCP"
@@ -8573,6 +8593,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Zobrazit m鱈stnost p�i p�ijet鱈 zpr叩vy"
 
+msgid "Use default font"
+msgstr "Pou転鱈t v箪choz鱈 font"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Interval udr転ov叩n鱈 na転ivu (v sekund叩ch)"
 
@@ -12088,9 +12111,6 @@
 msgid "Fatal Error"
 msgstr "Fat叩ln鱈 chyba"
 
-msgid "bug master"
-msgstr "lovec chyb"
-
 msgid "artist"
 msgstr "um�lec"
 
@@ -12270,6 +12290,9 @@
 msgid "Maithili"
 msgstr "Maithili"
 
+msgid "Meadow Mari"
+msgstr "Meadow Mari"
+
 msgid "Macedonian"
 msgstr "Makedon邸tina"
 
@@ -15350,6 +15373,12 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "Nem叩te opr叩vn�n鱈 k odinstalaci t辿to aplikace."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "Automaticky odm鱈tat od u転ivatel哲, kte�鱈 nejsou na seznamu kamar叩d哲"
+
+#~ msgid "bug master"
+#~ msgstr "lovec chyb"
+
 #~ msgid "Error requesting %s"
 #~ msgstr "Chyba 転叩dosti %s"
 
--- a/po/de.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/de.po	Sun Mar 13 18:14:04 2011 +0000
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-01-25 20:46+0100\n"
-"PO-Revision-Date: 2011-01-25 20:46+0100\n"
+"POT-Creation-Date: 2011-03-06 12:25+0100\n"
+"PO-Revision-Date: 2011-03-06 12:25+0100\n"
 "Last-Translator: Jochen Kemnade <jochenkemnade@web.de>\n"
 "Language-Team: German <de@li.org>\n"
 "Language: de\n"
@@ -3239,9 +3239,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Vorname"
 
@@ -4010,7 +4008,6 @@
 msgid "Postal Code"
 msgstr "Postleitzahl"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Land"
 
@@ -6148,6 +6145,9 @@
 msgid "Connecting..."
 msgstr "Verbinde..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Der eingegebene Anzeigename ist zu kurz."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Die eingegebene PIN hat eine ung端ltige L辰nge [7-10]."
 
@@ -6227,33 +6227,6 @@
 msgid "Retrieving User Information..."
 msgstr "Abrufen der Benutzerinformationen..."
 
-msgid "Loading menu..."
-msgstr "Lade das Men端..."
-
-msgid "Status Message"
-msgstr "Status-Nachricht"
-
-msgid "Rejection Message"
-msgstr "Ablehnungsnachricht"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Versteckte Nummer"
-
-msgid "Your MXit ID..."
-msgstr "Ihre MXit-ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP-Server"
-
-msgid "Connect via HTTP"
-msgstr "�ber HTTP verbinden"
-
-msgid "Enable splash-screen popup"
-msgstr "Startbildschirm-Popup aktivieren"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "Sie wurden von MultiMX hinausgeworfen."
@@ -6268,6 +6241,43 @@
 msgid "You have invited"
 msgstr "Sie haben eingeladen"
 
+msgid "Loading menu..."
+msgstr "Lade das Men端..."
+
+msgid "Status Message"
+msgstr "Status-Nachricht"
+
+msgid "Rejection Message"
+msgstr "Ablehnungsnachricht"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Versteckte Nummer"
+
+msgid "No profile available"
+msgstr "Kein Profil verf端gbar"
+
+msgid "This contact does not have a profile."
+msgstr "Dieser Kontakt hat kein Profil."
+
+msgid "Your MXit ID..."
+msgstr "Ihre MXit-ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Erneut einladen"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP-Server"
+
+msgid "Connect via HTTP"
+msgstr "�ber HTTP verbinden"
+
+msgid "Enable splash-screen popup"
+msgstr "Startbildschirm-Popup aktivieren"
+
 msgid "Last Online"
 msgstr "Zuletzt online"
 
@@ -7571,6 +7581,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Die Verbindung zum Raum %s wurde unterbrochen."
 
+msgid "The new formatting is invalid."
+msgstr "Die neue Formatierung ist ung端ltig."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Benutzernamen-Formatierung kann nur die Gro�-/Kleinschreibung und "
+"Leerzeichen 辰ndern."
+
 msgid "Pop-Up Message"
 msgstr "Pop-Up Nachricht"
 
@@ -7846,14 +7864,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ Privatsph辰renoptionen"
 
-msgid "The new formatting is invalid."
-msgstr "Die neue Formatierung ist ung端ltig."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Benutzernamen-Formatierung kann nur die Gro�-/Kleinschreibung und "
-"Leerzeichen 辰ndern."
-
 msgid "Change Address To:"
 msgstr "�ndere die Adresse zu:"
 
@@ -7961,75 +7971,6 @@
 "ist notwendig f端r IM-Bilder. Da Ihre IP-Adresse verwendet wird, kann dies "
 "eine Verletzung der Privatsph辰re bedeuten."
 
-msgid "Invalid SNAC"
-msgstr "Ung端ltiger SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "Server-Datenrate 端berschritten"
-
-msgid "Client rate limit exceeded"
-msgstr "Client-Datenrate 端berschritten"
-
-msgid "Service unavailable"
-msgstr "Dienst nicht verf端gbar"
-
-msgid "Service not defined"
-msgstr "Dienst nicht definiert"
-
-msgid "Obsolete SNAC"
-msgstr "Obsoleter SNAC"
-
-msgid "Not supported by host"
-msgstr "Nicht unterst端tzt vom Host"
-
-msgid "Not supported by client"
-msgstr "Nicht unterst端tzt vom Client"
-
-msgid "Refused by client"
-msgstr "Abgelehnt vom Client"
-
-msgid "Reply too big"
-msgstr "Antwort zu gro�"
-
-msgid "Responses lost"
-msgstr "Antworten verloren"
-
-msgid "Request denied"
-msgstr "Anfrage verweigert"
-
-msgid "Busted SNAC payload"
-msgstr "Ruinierte SNAC-Daten"
-
-msgid "Insufficient rights"
-msgstr "Ungen端gende Rechte"
-
-msgid "In local permit/deny"
-msgstr "In lokaler erlaubt/verboten-Liste"
-
-msgid "Warning level too high (sender)"
-msgstr "Warnstufe zu hoch (Absender)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Warnstufe zu hoch (Empf辰nger)"
-
-msgid "User temporarily unavailable"
-msgstr "Benutzer ist tempor辰r nicht verf端gbar"
-
-msgid "No match"
-msgstr "Keine �bereinstimmung"
-
-msgid "List overflow"
-msgstr "Listen端berlauf"
-
-msgid "Request ambiguous"
-msgstr "Anfrage ist nicht eindeutig"
-
-msgid "Queue full"
-msgstr "Warteschlange voll"
-
-msgid "Not while on AOL"
-msgstr "Nicht solange bei AOL angemeldet"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Buddy-Icon"
@@ -8148,6 +8089,75 @@
 msgid "Capabilities"
 msgstr "F辰higkeiten"
 
+msgid "Invalid SNAC"
+msgstr "Ung端ltiger SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Server-Datenrate 端berschritten"
+
+msgid "Client rate limit exceeded"
+msgstr "Client-Datenrate 端berschritten"
+
+msgid "Service unavailable"
+msgstr "Dienst nicht verf端gbar"
+
+msgid "Service not defined"
+msgstr "Dienst nicht definiert"
+
+msgid "Obsolete SNAC"
+msgstr "Obsoleter SNAC"
+
+msgid "Not supported by host"
+msgstr "Nicht unterst端tzt vom Host"
+
+msgid "Not supported by client"
+msgstr "Nicht unterst端tzt vom Client"
+
+msgid "Refused by client"
+msgstr "Abgelehnt vom Client"
+
+msgid "Reply too big"
+msgstr "Antwort zu gro�"
+
+msgid "Responses lost"
+msgstr "Antworten verloren"
+
+msgid "Request denied"
+msgstr "Anfrage verweigert"
+
+msgid "Busted SNAC payload"
+msgstr "Ruinierte SNAC-Daten"
+
+msgid "Insufficient rights"
+msgstr "Ungen端gende Rechte"
+
+msgid "In local permit/deny"
+msgstr "In lokaler erlaubt/verboten-Liste"
+
+msgid "Warning level too high (sender)"
+msgstr "Warnstufe zu hoch (Absender)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Warnstufe zu hoch (Empf辰nger)"
+
+msgid "User temporarily unavailable"
+msgstr "Benutzer ist tempor辰r nicht verf端gbar"
+
+msgid "No match"
+msgstr "Keine �bereinstimmung"
+
+msgid "List overflow"
+msgstr "Listen端berlauf"
+
+msgid "Request ambiguous"
+msgstr "Anfrage ist nicht eindeutig"
+
+msgid "Queue full"
+msgstr "Warteschlange voll"
+
+msgid "Not while on AOL"
+msgstr "Nicht solange bei AOL angemeldet"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8762,6 +8772,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Chatraum zeigen, wenn Nachricht empfangen wird"
 
+msgid "Use default font"
+msgstr "Standardschriftart benutzen"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Intervall zum Aufrechterhalten der Verbindung (Sekunden)"
 
--- a/po/es.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/es.po	Sun Mar 13 18:14:04 2011 +0000
@@ -7,7 +7,7 @@
 #               <franciscojavier.fernandez.serrador@hispalinux.es>, 2003.
 # Copyright (C) February 2010, Francisco Javier F. Serrador <fserrador@gmail.com>
 # Copyright (C) June 2002, April 2003, January 2004, March 2004, September 2004,
-# 	      January 2005, 2006-2008, July 2009, July 2010, August 2010
+# 	      January 2005, 2006-2008, July 2009, July 2010, August 2010, January 2011
 # 		Javier Fern叩ndez-Sanguino Pe単a  <jfs@debian.org>
 #
 # Agradecemos la ayuda de revisi坦n realizada por:
@@ -53,8 +53,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:33-0500\n"
-"PO-Revision-Date: 2010-12-15 03:32+0100\n"
+"POT-Creation-Date: 2011-02-02 23:34-0500\n"
+"PO-Revision-Date: 2011-01-30 21:28+0100\n"
 "Last-Translator: Javier Fern叩ndez-Sanguino <jfs@debian.org>\n"
 "Language-Team:  Spanish team <es@li.org>\n"
 "Language: \n"
@@ -2475,10 +2475,12 @@
 "Ruta donde se guardar叩n los archivos\n"
 "(Debe dar la ruta completa)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Rechazar autom叩ticamente las transferencias de usuarios que no est叩n en mi "
-"lista de amigos"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Cuando llega una solicitud de transferencia de un usuario que\n"
+"*no* est叩 en su lista de amigos:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2491,6 +2493,9 @@
 msgid "Create a new directory for each user"
 msgstr "Crear un directorio para cada usuario"
 
+msgid "Escape the filenames"
+msgstr "Indentar los nombres de fichero"
+
 msgid "Notes"
 msgstr "Notas"
 
@@ -3954,7 +3959,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "El servidor solicita autenticaci坦n en claro sobre un canal no cifrado"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Respuesta inv叩lida del servidor"
 
@@ -6298,6 +6306,20 @@
 msgid "Retrieving User Information..."
 msgstr "Obteniendo la informaci坦n del usuario..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "Ha sido expulsado de este MultiMX."
+
+msgid "was kicked"
+msgstr "fue expulsado"
+
+msgid "_Room Name:"
+msgstr "Nombre de _Sala:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "Ha sido invitado"
+
 msgid "Loading menu..."
 msgstr "Cargando el men炭..."
 
@@ -6325,20 +6347,6 @@
 msgid "Enable splash-screen popup"
 msgstr "Activar la pantalla de bienvenida"
 
-#. you were kicked
-msgid "You have been kicked from this MultiMX."
-msgstr "Ha sido expulsado de este MultiMX."
-
-msgid "was kicked"
-msgstr "fue expulsado"
-
-msgid "_Room Name:"
-msgstr "Nombre de _Sala:"
-
-#. Display system message in chat window
-msgid "You have invited"
-msgstr "Ha sido invitado"
-
 msgid "Last Online"
 msgstr "�ltima conexi坦n"
 
@@ -8007,75 +8015,6 @@
 "para Im叩genes de MI.  Como su direcci坦n IP ser叩 revelada, puede considerarse "
 "esto como un riesgo a su privacidad."
 
-msgid "Invalid SNAC"
-msgstr "SNAC inv叩lido"
-
-msgid "Server rate limit exceeded"
-msgstr "Se excedi坦 el l鱈mite de tasa del servidor"
-
-msgid "Client rate limit exceeded"
-msgstr "Se excedi坦 el l鱈mite de tasa del cliente"
-
-msgid "Service unavailable"
-msgstr "Servicio no disponible"
-
-msgid "Service not defined"
-msgstr "Servicio no definido"
-
-msgid "Obsolete SNAC"
-msgstr "SNAC obsoleto"
-
-msgid "Not supported by host"
-msgstr "No soportado por el servidor"
-
-msgid "Not supported by client"
-msgstr "No soportado por el cliente"
-
-msgid "Refused by client"
-msgstr "Rechazado por el cliente"
-
-msgid "Reply too big"
-msgstr "Respuesta demasiado grande"
-
-msgid "Responses lost"
-msgstr "Respuestas perdidas"
-
-msgid "Request denied"
-msgstr "Solicitud denegada"
-
-msgid "Busted SNAC payload"
-msgstr "Carga de SNAC destrozada"
-
-msgid "Insufficient rights"
-msgstr "Derechos insuficientes"
-
-msgid "In local permit/deny"
-msgstr "En la lista local de autorizar/negar"
-
-msgid "Warning level too high (sender)"
-msgstr "Nivel de aviso demasiado alto (emisor)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Nivel de aviso demasiado alto (receptor)"
-
-msgid "User temporarily unavailable"
-msgstr "Usuario temporalmente no disponible"
-
-msgid "No match"
-msgstr "No hubo coincidencia"
-
-msgid "List overflow"
-msgstr "Desbordamiento de la lista"
-
-msgid "Request ambiguous"
-msgstr "Solicitud ambigua"
-
-msgid "Queue full"
-msgstr "Cola llena"
-
-msgid "Not while on AOL"
-msgstr "No mientras est辿 en AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Icono de amigo"
@@ -8194,6 +8133,75 @@
 msgid "Capabilities"
 msgstr "Capacidades"
 
+msgid "Invalid SNAC"
+msgstr "SNAC inv叩lido"
+
+msgid "Server rate limit exceeded"
+msgstr "Se excedi坦 el l鱈mite de tasa del servidor"
+
+msgid "Client rate limit exceeded"
+msgstr "Se excedi坦 el l鱈mite de tasa del cliente"
+
+msgid "Service unavailable"
+msgstr "Servicio no disponible"
+
+msgid "Service not defined"
+msgstr "Servicio no definido"
+
+msgid "Obsolete SNAC"
+msgstr "SNAC obsoleto"
+
+msgid "Not supported by host"
+msgstr "No soportado por el servidor"
+
+msgid "Not supported by client"
+msgstr "No soportado por el cliente"
+
+msgid "Refused by client"
+msgstr "Rechazado por el cliente"
+
+msgid "Reply too big"
+msgstr "Respuesta demasiado grande"
+
+msgid "Responses lost"
+msgstr "Respuestas perdidas"
+
+msgid "Request denied"
+msgstr "Solicitud denegada"
+
+msgid "Busted SNAC payload"
+msgstr "Carga de SNAC destrozada"
+
+msgid "Insufficient rights"
+msgstr "Derechos insuficientes"
+
+msgid "In local permit/deny"
+msgstr "En la lista local de autorizar/negar"
+
+msgid "Warning level too high (sender)"
+msgstr "Nivel de aviso demasiado alto (emisor)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Nivel de aviso demasiado alto (receptor)"
+
+msgid "User temporarily unavailable"
+msgstr "Usuario temporalmente no disponible"
+
+msgid "No match"
+msgstr "No hubo coincidencia"
+
+msgid "List overflow"
+msgstr "Desbordamiento de la lista"
+
+msgid "Request ambiguous"
+msgstr "Solicitud ambigua"
+
+msgid "Queue full"
+msgstr "Cola llena"
+
+msgid "Not while on AOL"
+msgstr "No mientras est辿 en AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8786,14 +8794,14 @@
 msgid "Select Server"
 msgstr "Seleccionar servidor"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Conectar por TCP"
@@ -12353,9 +12361,6 @@
 msgid "Fatal Error"
 msgstr "Error fatal"
 
-msgid "bug master"
-msgstr "maestro de las erratas"
-
 msgid "artist"
 msgstr "artista"
 
@@ -12536,6 +12541,9 @@
 msgid "Maithili"
 msgstr "Maithili"
 
+msgid "Meadow Mari"
+msgstr "Mari"
+
 msgid "Macedonian"
 msgstr "Macedonio"
 
@@ -15685,6 +15693,14 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "No tiene permisos para desinstalar esta aplicaci坦n."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr ""
+#~ "Rechazar autom叩ticamente las transferencias de usuarios que no est叩n en "
+#~ "mi lista de amigos"
+
+#~ msgid "bug master"
+#~ msgstr "maestro de las erratas"
+
 #~ msgid "Error requesting %s"
 #~ msgstr "Error al solicitar %s"
 
@@ -15757,20 +15773,20 @@
 #~ msgstr "Album"
 
 #~ msgid "Current Mood"
-#~ msgstr "Luna actual"
+#~ msgstr "Estado de 叩nimo actual"
 
 #~ msgid "New Mood"
-#~ msgstr "Luna nueva"
+#~ msgstr "Nuevo estado de 叩nimo"
 
 #~ msgid "Change your Mood"
-#~ msgstr "Cambiar su luna"
+#~ msgstr "Cambiar su estado de 叩nimo"
 
 #~ msgid "How do you feel right now?"
 #~ msgstr "多C坦mo se encuentra justo ahora?"
 
 #, fuzzy
 #~ msgid "Change Mood..."
-#~ msgstr "Cambiar su contrase単a..."
+#~ msgstr "Cambiar su estado de 叩nimo..."
 
 #~ msgid "Pager server"
 #~ msgstr "Servidor buscapersonas"
--- a/po/fr.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/fr.po	Sun Mar 13 18:14:04 2011 +0000
@@ -4,7 +4,7 @@
 # Copyright (C) 2002, St辿phane Pontier <stephane.pontier@free.fr>
 # Copyright (C) 2002, St辿phane Wirtel <stephane.wirtel@belgacom.net>
 # Copyright (C) 2002, Lo誰c Jeannin <loic.jeannin@free.fr>
-# Copyright (C) 2002-2010, �ric Boumaour <zongo_fr@users.sourceforge.net>
+# Copyright (C) 2002-2011, �ric Boumaour <zongo_fr@users.sourceforge.net>
 #
 # This file is distributed under the same license as the Pidgin package.
 #
@@ -21,14 +21,14 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:33-0500\n"
-"PO-Revision-Date: 2010-12-16 23:25+0100\n"
+"POT-Creation-Date: 2011-01-30 21:28+0100\n"
+"PO-Revision-Date: 2011-01-30 21:14+0100\n"
 "Last-Translator: �ric Boumaour <zongo_fr@users.sourceforge.net>\n"
 "Language-Team: fr <fr@li.org>\n"
-"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
 "Plural-Forms: nplurals=2; plural=n>1;\n"
 
 #. Translators may want to transliterate the name.
@@ -864,8 +864,8 @@
 "System events will only be logged if the \"Log all status changes to system "
 "log\" preference is enabled."
 msgstr ""
-"Les 辿v辿nements syst竪me ne seront archiv辿s que si l'option 束�Archiver tous "
-"les changements d'辿tat dans les archives syst竪me�損 est activ辿e."
+"Les 辿v辿nements syst竪me ne seront archiv辿s que si l'option 束�Archiver tous les "
+"changements d'辿tat dans les archives syst竪me�損 est activ辿e."
 
 msgid ""
 "Instant messages will only be logged if the \"Log all instant messages\" "
@@ -2372,9 +2372,12 @@
 "Dossier o湛 placer les fichiers\n"
 "(Veuillez fournir le chemin complet)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Refuser automatiquement si l'utilisateur n'est pas dans ma liste de contacts"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Quand une demande de transfert arrive de quelqu'un qui\n"
+"n'est *pas* dans la liste de contacts�:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2387,6 +2390,9 @@
 msgid "Create a new directory for each user"
 msgstr "Cr辿er un nouveau dossier pour chaque contact"
 
+msgid "Escape the filenames"
+msgstr "Encoder les noms des fichiers"
+
 msgid "Notes"
 msgstr "Notes"
 
@@ -2767,8 +2773,7 @@
 msgstr "Message d辿connect辿"
 
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
-msgstr ""
-"Vous pouvez modifier ou supprimer l'alerte dans la fen棚tre 束�Alertes�損."
+msgstr "Vous pouvez modifier ou supprimer l'alerte dans la fen棚tre 束�Alertes�損."
 
 msgid "Yes"
 msgstr "Oui"
@@ -3859,7 +3864,10 @@
 "Le serveur demande une authentification en texte non chiffr辿 au travers d'un "
 "flux crypt辿."
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "R辿ponse non valide du serveur"
 
@@ -6197,6 +6205,20 @@
 msgid "Retrieving User Information..."
 msgstr "R辿cup辿ration des informations de l'utilisateur..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "Vous avez 辿t辿 expuls辿 de ce MultiMX."
+
+msgid "was kicked"
+msgstr "a 辿t辿 expuls辿"
+
+msgid "_Room Name:"
+msgstr "_Salon�:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "Vous avez 辿t辿 invit辿"
+
 msgid "Loading menu..."
 msgstr "Chargement du menu..."
 
@@ -6224,20 +6246,6 @@
 msgid "Enable splash-screen popup"
 msgstr "Activer l'affichage de la banni竪re"
 
-#. you were kicked
-msgid "You have been kicked from this MultiMX."
-msgstr "Vous avez 辿t辿 expuls辿 de ce MultiMX."
-
-msgid "was kicked"
-msgstr "a 辿t辿 expuls辿"
-
-msgid "_Room Name:"
-msgstr "_Salon�:"
-
-#. Display system message in chat window
-msgid "You have invited"
-msgstr "Vous avez 辿t辿 invit辿"
-
 msgid "Last Online"
 msgstr "En ligne derni竪rement"
 
@@ -7908,75 +7916,6 @@
 "d'images. Votre adresse IP sera r辿v辿l辿e et ceci peut 棚tre consid辿r辿 comme "
 "une faille de s辿curit辿."
 
-msgid "Invalid SNAC"
-msgstr "SNAC non valide"
-
-msgid "Server rate limit exceeded"
-msgstr "Vitesse du serveur d辿pass辿e"
-
-msgid "Client rate limit exceeded"
-msgstr "Vitesse du client d辿pass辿e"
-
-msgid "Service unavailable"
-msgstr "Service non disponible"
-
-msgid "Service not defined"
-msgstr "Service non d辿fini"
-
-msgid "Obsolete SNAC"
-msgstr "SNAC obsol竪te"
-
-msgid "Not supported by host"
-msgstr "Non support辿 par l'h担te"
-
-msgid "Not supported by client"
-msgstr "Non support辿 par le client"
-
-msgid "Refused by client"
-msgstr "Refus辿 par le client"
-
-msgid "Reply too big"
-msgstr "R辿ponse trop grosse"
-
-msgid "Responses lost"
-msgstr "R辿ponses perdues"
-
-msgid "Request denied"
-msgstr "Requ棚te refus辿e"
-
-msgid "Busted SNAC payload"
-msgstr "Charge SNAC incorrecte"
-
-msgid "Insufficient rights"
-msgstr "Droits insuffisants"
-
-msgid "In local permit/deny"
-msgstr "Dans l'autorisation/interdiction locale"
-
-msgid "Warning level too high (sender)"
-msgstr "Niveau d'avertissement trop 辿lev辿 (辿mission)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Niveau d'avertissement trop 辿lev辿 (r辿ception)"
-
-msgid "User temporarily unavailable"
-msgstr "L'utilisateur est temporairement indisponible."
-
-msgid "No match"
-msgstr "Aucun r辿sultat"
-
-msgid "List overflow"
-msgstr "D辿passement de liste"
-
-msgid "Request ambiguous"
-msgstr "Requ棚te ambigu谷"
-
-msgid "Queue full"
-msgstr "File d'attente pleine"
-
-msgid "Not while on AOL"
-msgstr "Impossible sur AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Ic担ne du contact"
@@ -8095,6 +8034,75 @@
 msgid "Capabilities"
 msgstr "Possibilit辿s"
 
+msgid "Invalid SNAC"
+msgstr "SNAC non valide"
+
+msgid "Server rate limit exceeded"
+msgstr "Vitesse du serveur d辿pass辿e"
+
+msgid "Client rate limit exceeded"
+msgstr "Vitesse du client d辿pass辿e"
+
+msgid "Service unavailable"
+msgstr "Service non disponible"
+
+msgid "Service not defined"
+msgstr "Service non d辿fini"
+
+msgid "Obsolete SNAC"
+msgstr "SNAC obsol竪te"
+
+msgid "Not supported by host"
+msgstr "Non support辿 par l'h担te"
+
+msgid "Not supported by client"
+msgstr "Non support辿 par le client"
+
+msgid "Refused by client"
+msgstr "Refus辿 par le client"
+
+msgid "Reply too big"
+msgstr "R辿ponse trop grosse"
+
+msgid "Responses lost"
+msgstr "R辿ponses perdues"
+
+msgid "Request denied"
+msgstr "Requ棚te refus辿e"
+
+msgid "Busted SNAC payload"
+msgstr "Charge SNAC incorrecte"
+
+msgid "Insufficient rights"
+msgstr "Droits insuffisants"
+
+msgid "In local permit/deny"
+msgstr "Dans l'autorisation/interdiction locale"
+
+msgid "Warning level too high (sender)"
+msgstr "Niveau d'avertissement trop 辿lev辿 (辿mission)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Niveau d'avertissement trop 辿lev辿 (r辿ception)"
+
+msgid "User temporarily unavailable"
+msgstr "L'utilisateur est temporairement indisponible."
+
+msgid "No match"
+msgstr "Aucun r辿sultat"
+
+msgid "List overflow"
+msgstr "D辿passement de liste"
+
+msgid "Request ambiguous"
+msgstr "Requ棚te ambigu谷"
+
+msgid "Queue full"
+msgstr "File d'attente pleine"
+
+msgid "Not while on AOL"
+msgstr "Impossible sur AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8686,14 +8694,14 @@
 msgid "Select Server"
 msgstr "Choisir le serveur"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Connexion par TCP"
@@ -10445,8 +10453,8 @@
 msgstr ""
 "Le serveur Yahoo! a demand辿 une m辿thode d'authentification non reconnue. "
 "Cette version de l'application n'arrivera probablement pas � se connecter au "
-"service Yahoo!. Vous pouvez v辿rifier qu'une mise � jour est disponible sur "
-"%s."
+"service Yahoo!. Vous pouvez v辿rifier qu'une mise � jour est disponible sur %"
+"s."
 
 msgid "Failed Yahoo! Authentication"
 msgstr "�chec de l'authentification Yahoo!"
@@ -12257,9 +12265,6 @@
 msgid "Fatal Error"
 msgstr "Erreur critique"
 
-msgid "bug master"
-msgstr "maitre des bogues"
-
 msgid "artist"
 msgstr "artiste"
 
@@ -12439,6 +12444,9 @@
 msgid "Maithili"
 msgstr "Ma誰hili"
 
+msgid "Meadow Mari"
+msgstr "Mari des prairies"
+
 msgid "Macedonian"
 msgstr "Mac辿donien"
 
@@ -12559,8 +12567,8 @@
 "to multiple messaging services at once.  %s is written in C using GTK+.  %s "
 "is released, and may be modified and redistributed,  under the terms of the "
 "GPL version 2 (or later).  A copy of the GPL is distributed with %s.  %s is "
-"copyrighted by its contributors, a list of whom is also distributed with "
-"%s.  There is no warranty for %s.<BR><BR>"
+"copyrighted by its contributors, a list of whom is also distributed with %"
+"s.  There is no warranty for %s.<BR><BR>"
 msgstr ""
 "%s est un client de messagerie bas辿 sur libpurple capable de se connecter � "
 "de multiples services de messageries instantan辿es. %s est 辿crit en C et "
@@ -13115,16 +13123,16 @@
 
 #, c-format
 msgid ""
-"Are you sure you want to permanently delete the log of the conversation in "
-"%s which started at %s?"
+"Are you sure you want to permanently delete the log of the conversation in %"
+"s which started at %s?"
 msgstr ""
 "�tes-vous s短r de vouloir supprimer les archives de la conversation dans %s "
 "dat辿e du %s�?"
 
 #, c-format
 msgid ""
-"Are you sure you want to permanently delete the system log which started at "
-"%s?"
+"Are you sure you want to permanently delete the system log which started at %"
+"s?"
 msgstr "�tes-vous s短r de vouloir supprimer les archives syst竪me dat辿es du %s�?"
 
 msgid "Delete Log?"
@@ -14956,8 +14964,8 @@
 "'Enter' in the entry box to send. Watch the debug window."
 msgstr ""
 "Permet d'envoyer des donn辿es brutes aux protocoles en mode texte (XMPP, MSN, "
-"IRC, TOC). Tapez 束�Entr辿e�損 dans la bo樽te de saisie pour envoyer. Observez "
-"le r辿sultat dans la fen棚tre de debug."
+"IRC, TOC). Tapez 束�Entr辿e�損 dans la bo樽te de saisie pour envoyer. Observez le "
+"r辿sultat dans la fen棚tre de debug."
 
 #, c-format
 msgid "You can upgrade to %s %s today."
@@ -15485,13 +15493,13 @@
 #, no-c-format
 msgid ""
 "Error Installing Spellchecking ($R3).$\\rIf retrying fails, manual "
-"installation instructions are at: http://developer.pidgin.im/wiki/Installing"
-"%20Pidgin#manual_win32_spellcheck_installation"
+"installation instructions are at: http://developer.pidgin.im/wiki/Installing%"
+"20Pidgin#manual_win32_spellcheck_installation"
 msgstr ""
 "Erreur lors de l'installation du correcteur orthographique ($R3).$\\rSi une "
 "nouvelle tentative 辿choue, veuillez suivre les instructions sur http://"
-"developer.pidgin.im/wiki/Installing"
-"%20Pidgin#manual_win32_spellcheck_installation"
+"developer.pidgin.im/wiki/Installing%"
+"20Pidgin#manual_win32_spellcheck_installation"
 
 #. Installer Subsection Text
 msgid "GTK+ Runtime (required if not present)"
@@ -15570,6 +15578,14 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "Vous n'avez pas les permissions pour supprimer cette application."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr ""
+#~ "Refuser automatiquement si l'utilisateur n'est pas dans ma liste de "
+#~ "contacts"
+
+#~ msgid "bug master"
+#~ msgstr "maitre des bogues"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "Erreur lors du transfert dans le flux de donn辿es in-band.\n"
 
--- a/po/he.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/he.po	Sun Mar 13 18:14:04 2011 +0000
@@ -8,8 +8,8 @@
 msgstr ""
 "Project-Id-Version: he\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:33-0500\n"
-"PO-Revision-Date: 2010-12-16 16:39+0200\n"
+"POT-Creation-Date: 2011-02-02 23:34-0500\n"
+"PO-Revision-Date: 2011-01-26 08:34+0200\n"
 "Last-Translator: Shalom Craimer <scraimer at g mail dot com>\n"
 "Language-Team: Hebrew <he@li.org>\n"
 "Language: he\n"
@@ -2278,8 +2278,12 @@
 "�廬�� �廩��廨 �� �廬 �廡�廢��\n"
 "(�廩 �廖廚廡 �廬�� ���)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "��� �������廬 ��廩廬�廩�� 廩���� �廨廩��廬 ���廨�� 廩��"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"��廩廨 ���廣� �廡廩� ��廣�廨廬-廡��廛 ��廩廬�廩\n"
+"�廩廨 *����* �廨廩��廬 ���廨�� 廩��:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2291,6 +2295,9 @@
 msgid "Create a new directory for each user"
 msgstr "廢�廨 廖廚廨��� ��廩� 廣��廨 �� �廩廬�廩"
 
+msgid "Escape the filenames"
+msgstr "廡�� ��廬��廬 �廣��廬��廬 �廩��廬 �廡�廢��"
+
 msgid "Notes"
 msgstr "�廣廨�廬"
 
@@ -3724,7 +3731,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "�廩廨廬 ��廨廩 ����廬 �� ��廢廚� �廣� 廬廡廩�廨廬 �� ��廢廚�廬"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "廬���� �� 廬廡廚� ��廩廨廬"
 
@@ -5980,6 +5990,20 @@
 msgid "Retrieving User Information..."
 msgstr "廩��廝 ���廣 �廩廬�廩..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "��廣�廬 �廬�� MultiMX ��."
+
+msgid "was kicked"
+msgstr "��廣�/�"
+
+msgid "_Room Name:"
+msgstr "廩� _��廨:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "�����廬"
+
 msgid "Loading menu..."
 msgstr "��廣� 廬廚廨��..."
 
@@ -6007,20 +6031,6 @@
 msgid "Enable splash-screen popup"
 msgstr "�廚廩廨 廚廬��廬 ����-�廡���"
 
-#. you were kicked
-msgid "You have been kicked from this MultiMX."
-msgstr "��廣�廬 �廬�� MultiMX ��."
-
-msgid "was kicked"
-msgstr "��廣�/�"
-
-msgid "_Room Name:"
-msgstr "廩� _��廨:"
-
-#. Display system message in chat window
-msgid "You have invited"
-msgstr "�����廬"
-
 msgid "Last Online"
 msgstr "����廨 ��廨��"
 
@@ -7620,75 +7630,6 @@
 "�� ��廨廩 ����廨 �廩�廨 ��� 廩�� ���廩���, ����廛 廣��廨 廬����廬 ����廣�廬. ������ 廩�廬��廬 "
 "�-IP 廩�� 廬��廩廝, ��廬�� ��� ���廩� �廖���� �廚廨���廬�."
 
-msgid "Invalid SNAC"
-msgstr "SNAC �� 廬廡廝"
-
-msgid "Server rate limit exceeded"
-msgstr "�廚廨�廬 �廣�廨 �����廬 �廩廨廬"
-
-msgid "Client rate limit exceeded"
-msgstr "�廚廨�廬 �廣�廨 �����廬 ��廡��"
-
-msgid "Service unavailable"
-msgstr "�廩�廨�廬 ���� ����"
-
-msgid "Service not defined"
-msgstr "廩�廨�廬 ���� ����廨"
-
-msgid "Obsolete SNAC"
-msgstr "SNAC ���廩�"
-
-msgid "Not supported by host"
-msgstr "�� �廬�� 廣�-��� �廩廨廬"
-
-msgid "Not supported by client"
-msgstr "�� �廬�� 廣�-��� ��廡��"
-
-msgid "Refused by client"
-msgstr "�����廨 ���� 廣� ��� ��廡��."
-
-msgid "Reply too big"
-msgstr "��廣�� ���� ����"
-
-msgid "Responses lost"
-msgstr "���� ��廩����"
-
-msgid "Request denied"
-msgstr "��廡廩� ����廬"
-
-msgid "Busted SNAC payload"
-msgstr "���廣 廚��� �-SNAC"
-
-msgid "Insufficient rights"
-msgstr "��� �� �廨廩��廬"
-
-msgid "In local permit/deny"
-msgstr "���廩�廨/廩���� �廡�����"
-
-msgid "Warning level too high (sender)"
-msgstr "廨�廬 ���廨� ����� ��� (廩���("
-
-msgid "Warning level too high (receiver)"
-msgstr "廨�廬 ���廨� ����� ��� (�廡��)"
-
-msgid "User temporarily unavailable"
-msgstr "��廩廬�廩 ���� ���� �廨�廣"
-
-msgid "No match"
-msgstr "��� �廬���"
-
-msgid "List overflow"
-msgstr "���廩廬 ������廬 �廨廩���"
-
-msgid "Request ambiguous"
-msgstr "�廡廩� �� �廨�廨�"
-
-msgid "Queue full"
-msgstr "�廬�廨 ���"
-
-msgid "Not while on AOL"
-msgstr "�� ���� 廩��廬 �-AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "廖�� ��廩 �廡廩廨"
@@ -7807,6 +7748,75 @@
 msgid "Capabilities"
 msgstr "�����廬"
 
+msgid "Invalid SNAC"
+msgstr "SNAC �� 廬廡廝"
+
+msgid "Server rate limit exceeded"
+msgstr "�廚廨�廬 �廣�廨 �����廬 �廩廨廬"
+
+msgid "Client rate limit exceeded"
+msgstr "�廚廨�廬 �廣�廨 �����廬 ��廡��"
+
+msgid "Service unavailable"
+msgstr "�廩�廨�廬 ���� ����"
+
+msgid "Service not defined"
+msgstr "廩�廨�廬 ���� ����廨"
+
+msgid "Obsolete SNAC"
+msgstr "SNAC ���廩�"
+
+msgid "Not supported by host"
+msgstr "�� �廬�� 廣�-��� �廩廨廬"
+
+msgid "Not supported by client"
+msgstr "�� �廬�� 廣�-��� ��廡��"
+
+msgid "Refused by client"
+msgstr "�����廨 ���� 廣� ��� ��廡��."
+
+msgid "Reply too big"
+msgstr "��廣�� ���� ����"
+
+msgid "Responses lost"
+msgstr "���� ��廩����"
+
+msgid "Request denied"
+msgstr "��廡廩� ����廬"
+
+msgid "Busted SNAC payload"
+msgstr "���廣 廚��� �-SNAC"
+
+msgid "Insufficient rights"
+msgstr "��� �� �廨廩��廬"
+
+msgid "In local permit/deny"
+msgstr "���廩�廨/廩���� �廡�����"
+
+msgid "Warning level too high (sender)"
+msgstr "廨�廬 ���廨� ����� ��� (廩���("
+
+msgid "Warning level too high (receiver)"
+msgstr "廨�廬 ���廨� ����� ��� (�廡��)"
+
+msgid "User temporarily unavailable"
+msgstr "��廩廬�廩 ���� ���� �廨�廣"
+
+msgid "No match"
+msgstr "��� �廬���"
+
+msgid "List overflow"
+msgstr "���廩廬 ������廬 �廨廩���"
+
+msgid "Request ambiguous"
+msgstr "�廡廩� �� �廨�廨�"
+
+msgid "Queue full"
+msgstr "�廬�廨 ���"
+
+msgid "Not while on AOL"
+msgstr "�� ���� 廩��廬 �-AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8398,14 +8408,14 @@
 msgid "Select Server"
 msgstr "��廨 廩廨廬"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "�廬��廨 �廣�廨廬 TCP"
@@ -11881,9 +11891,6 @@
 msgid "Fatal Error"
 msgstr "廩���� 廡����廬"
 
-msgid "bug master"
-msgstr "廩廨-������"
-
 msgid "artist"
 msgstr "���"
 
@@ -12063,6 +12070,9 @@
 msgid "Maithili"
 msgstr "��廬'���"
 
+msgid "Meadow Mari"
+msgstr "Meadow Mari"
+
 msgid "Macedonian"
 msgstr "�廡����廬"
 
@@ -15107,6 +15117,12 @@
 msgid "You do not have permission to uninstall this application."
 msgstr ".��� �� ���廬 ����廡 廬���� ��廬"
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "��� �������廬 ��廩廬�廩�� 廩���� �廨廩��廬 ���廨�� 廩��"
+
+#~ msgid "bug master"
+#~ msgstr "廩廨-������"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "�廨廣� 廩���� �廣廬 ��廣�廨� ��廨� �廬���\n"
 
--- a/po/it.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/it.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,6 +1,6 @@
 # Pidgin Italian translation
 # Copyright (C) 2002, Salvatore di Maggio <titanicus@libero.it>
-# Copyright (C) 2003-2010, Claudio Satriano <satriano@na.infn.it>
+# Copyright (C) 2003-2011, Claudio Satriano <satriano@gmail.com>
 #
 # This file is distributed under the same license as the Pidgin package.
 #
@@ -8,9 +8,9 @@
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:33-0500\n"
-"PO-Revision-Date: 2010-05-24 12:38+0100\n"
-"Last-Translator: Claudio Satriano <satriano@na.infn.it>\n"
+"POT-Creation-Date: 2011-03-10 01:39-0800\n"
+"PO-Revision-Date: 2011-03-07 15:26+0100\n"
+"Last-Translator: Claudio Satriano <satriano@gmail.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -61,9 +61,8 @@
 msgid "Error"
 msgstr "Errore"
 
-#, fuzzy
 msgid "Account was not modified"
-msgstr "L'account non 竪 stato aggiunto"
+msgstr "L'account non 竪 stato modificato"
 
 msgid "Account was not added"
 msgstr "L'account non 竪 stato aggiunto"
@@ -74,10 +73,14 @@
 msgid ""
 "The account's protocol cannot be changed while it is connected to the server."
 msgstr ""
+"Il protocollo dell'account non pu嘆 essere cambiato mentre 竪 connesso al "
+"server."
 
 msgid ""
 "The account's username cannot be changed while it is connected to the server."
 msgstr ""
+"Il nome utente dell'account non pu嘆 essere cambiato mentre 竪 connesso al "
+"server."
 
 msgid "New mail notifications"
 msgstr "Notifica i nuovi messaggi di posta"
@@ -1704,13 +1707,15 @@
 "The certificate is not valid yet.  Check that your computer's date and time "
 "are accurate."
 msgstr ""
-
-#, fuzzy
+"Il certificato non 竪 ancora valido. Verifica che la data e l'ora del tuo "
+"computer siano accurate."
+
 msgid ""
 "The certificate has expired and should not be considered valid.  Check that "
 "your computer's date and time are accurate."
 msgstr ""
-"Il certificato 竪 scaduto e non dovrebbe essere considerato come valido."
+"Il certificato 竪 scaduto e non dovrebbe essere considerato come valido. "
+"Verifica che la data e l'ora del tuo computer sono accurate."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
 msgid "The certificate presented is not issued to this domain."
@@ -2371,9 +2376,12 @@
 "Posizione in cui salvare i file\n"
 "(Digitare il percorso completo)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Rifiuta automaticamente per gli utenti non presenti nella lista contatti"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Quando arriva una richiesta di trasferimento file da\n"
+"un utente che *non* 竪 nella tua lista contatti:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2386,6 +2394,9 @@
 msgid "Create a new directory for each user"
 msgstr "Crea una nuova directory per ciascun utente"
 
+msgid "Escape the filenames"
+msgstr "Codifica i nomi dei file"
+
 msgid "Notes"
 msgstr "Note"
 
@@ -3232,9 +3243,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Nome"
 
@@ -3849,7 +3858,10 @@
 "Il server richiede l'autenticazione sotto forma di testo semplice su uno "
 "stream non criptato"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Risposta non valida da parte del server"
 
@@ -3868,7 +3880,7 @@
 msgstr "Autenticazione come testo semplice"
 
 msgid "You require encryption, but it is not available on this server."
-msgstr "Hai richiesto la criptatura, ma non 竪 disponibile su questo server."
+msgstr "Hai richiesto la crittografia, ma non 竪 disponibile su questo server."
 
 msgid "Invalid challenge from server"
 msgstr "Challenge non valido dal server"
@@ -3876,18 +3888,17 @@
 msgid "Server thinks authentication is complete, but client does not"
 msgstr "Il server ritiene che l'autenticazione sia completa; il client no "
 
-#, fuzzy
 msgid "Server may require plaintext authentication over an unencrypted stream"
 msgstr ""
-"Il server richiede l'autenticazione sotto forma di testo semplice su uno "
-"stream non criptato"
-
-#, fuzzy, c-format
+"Il server potrebbe richiedere l'autenticazione sotto forma di testo semplice "
+"su uno stream non criptato"
+
+#, c-format
 msgid ""
 "%s may require plaintext authentication over an unencrypted connection.  "
 "Allow this and continue authentication?"
 msgstr ""
-"%s richiede l'autenticazione sotto forma di testo semplice su una "
+"%s potrebbe richiedere l'autenticazione sotto forma di testo semplice su una "
 "connessione non criptata. Procedere con l'autenticazione?"
 
 msgid "SASL authentication failed"
@@ -3995,7 +4006,6 @@
 msgid "Postal Code"
 msgstr "Codice postale"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Paese"
 
@@ -4763,20 +4773,17 @@
 msgid "Domain"
 msgstr "Dominio"
 
-#, fuzzy
 msgid "Require encryption"
-msgstr "Richiedi autorizzazione"
-
-#, fuzzy
+msgstr "Richiedi crittografia"
+
 msgid "Use encryption if available"
-msgstr "Informazioni sull'utente non disponibili: %s"
+msgstr "Usa crittografia, se disponibile"
 
 msgid "Use old-style SSL"
-msgstr ""
-
-#, fuzzy
+msgstr "Utilizza SSL vecchio stile"
+
 msgid "Connection security"
-msgstr "Connessione scaduta"
+msgstr "Sicurezza della connessione"
 
 msgid "Allow plaintext auth over unencrypted streams"
 msgstr ""
@@ -5443,28 +5450,23 @@
 msgid "Set friendly name for %s."
 msgstr "Imposta un alias per %s."
 
-#, fuzzy
 msgid "Set Friendly Name"
-msgstr "Imposta un alias..."
+msgstr "Imposta un alias"
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr "Questo 竪 il nome con il quale i contatti MSN ti vedranno."
 
-#, fuzzy
 msgid "This Location"
-msgstr "Localit�"
-
-#, fuzzy
+msgstr "Questa postazione"
+
 msgid "This is the name that identifies this location"
-msgstr "Questo 竪 il nome con il quale i contatti MSN ti vedranno."
-
-#, fuzzy
+msgstr "Questo 竪 il nome che identifica questa postazione"
+
 msgid "Other Locations"
-msgstr "Localit�"
-
-#, fuzzy
+msgstr "Altre postazioni"
+
 msgid "You can sign out from other locations here"
-msgstr "Sei connesso da un'altra postazione"
+msgstr "Da qui puoi disconnetterti dalle altre postazioni"
 
 #. TODO: Due to limitations in our current request field API, the
 #. following string will show up with a trailing colon.  This should
@@ -5472,18 +5474,17 @@
 #. a separate purple_request_field_label_new_without_colon function,
 #. or by never automatically adding the colon and requiring that
 #. callers add the colon themselves.
-#, fuzzy
 msgid "You are not signed in from any other locations."
-msgstr "Sei connesso da un'altra postazione"
-
-#, fuzzy
+msgstr "Non sei connesso da nessun'altra postazione"
+
 msgid "Allow multiple logins?"
-msgstr "Consenti istanze multiple"
+msgstr "Consenti connessioni multiple?"
 
 msgid ""
 "Do you want to allow or disallow connecting from multiple locations "
 "simultaneously?"
 msgstr ""
+"Vuoi consentire o vietare la connessione simultanea da diverse postazioni?"
 
 msgid "Allow"
 msgstr "Permetti"
@@ -5572,9 +5573,8 @@
 msgid "Set Friendly Name..."
 msgstr "Imposta un alias..."
 
-#, fuzzy
 msgid "View Locations..."
-msgstr "Scegli posizione..."
+msgstr "Guarda le postazioni..."
 
 msgid "Set Home Phone Number..."
 msgstr "Imposta il telefono di casa..."
@@ -5588,9 +5588,8 @@
 msgid "Enable/Disable Mobile Devices..."
 msgstr "Abilita/Disabilita i dispositivi portatili..."
 
-#, fuzzy
 msgid "Allow/Disallow Multiple Logins..."
-msgstr "Permetti/Vieta Mobile Pages..."
+msgstr "Permetti/Vieta le connessioni multiple..."
 
 msgid "Allow/Disallow Mobile Pages..."
 msgstr "Permetti/Vieta Mobile Pages..."
@@ -5811,7 +5810,7 @@
 msgstr "Consenti connessioni dirette"
 
 msgid "Allow connecting from multiple locations"
-msgstr ""
+msgstr "Consenti la connessione da diverse postazioni"
 
 msgid "nudge: nudge a user to get their attention"
 msgstr "nudge: Richiama l'attenzione di un contatto con un trillo"
@@ -6026,9 +6025,8 @@
 msgid "The two PINs you entered do not match."
 msgstr "I due PIN immessi non corrispondono."
 
-#, fuzzy
 msgid "The Display Name you entered is invalid."
-msgstr "Il nome immesso non 竪 valido."
+msgstr "Il nome utente immesso non 竪 valido."
 
 msgid ""
 "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
@@ -6050,9 +6048,8 @@
 "L'informazione sul tuo profilo non 竪 stata ancora recuperata. Riprova pi湛 "
 "tardi."
 
-#, fuzzy
 msgid "Your UID"
-msgstr "Il tuo ID MXit"
+msgstr "Il tuo UID"
 
 #. pin
 #. pin (required)
@@ -6123,12 +6120,15 @@
 msgid "Connecting..."
 msgstr "Connessione in corso..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Il nome utente immesso 竪 troppo corto."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Il PIN immesso ha una lunghezza non valida [7-10]."
 
 #. mxit login name
 msgid "MXit ID"
-msgstr ""
+msgstr "ID MXit"
 
 #. show the form to the user to complete
 msgid "Register New MXit Account"
@@ -6157,13 +6157,11 @@
 msgid "Invalid country selected. Please try again."
 msgstr "Paese selezionato non valido. Riprova pi湛 tardi."
 
-#, fuzzy
 msgid "The MXit ID you entered is not registered. Please register first."
-msgstr "Il nome utente non 竪 registrato. Registrati prima."
-
-#, fuzzy
+msgstr "L'ID MXit immesso non 竪 registrato. Registrati prima."
+
 msgid "The MXit ID you entered is already registered. Please choose another."
-msgstr "Il nome utente 竪 gi� registrato. Scegli un altro nome utente."
+msgstr "L'ID MXit immesso 竪 gi� registrato. Scegline un altro."
 
 msgid "Internal error. Please try again later."
 msgstr "Errore interno. Riprovare pi湛 tardi"
@@ -6194,6 +6192,20 @@
 msgid "Retrieving User Information..."
 msgstr "Scaricamento in corso delle informazioni sull'utente..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "Sei stato cacciato da questo MultiMX."
+
+msgid "was kicked"
+msgstr "竪 stato cacciato"
+
+msgid "_Room Name:"
+msgstr "Nome della _Stanza:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "Hai invitato"
+
 msgid "Loading menu..."
 msgstr "Caricamento del menu in corso..."
 
@@ -6207,9 +6219,18 @@
 msgid "Hidden Number"
 msgstr "Numero nascosto"
 
-#, fuzzy
+msgid "No profile available"
+msgstr "Nessun profilo disponibile"
+
+msgid "This contact does not have a profile."
+msgstr "Questo contatto non ha un profilo."
+
 msgid "Your MXit ID..."
-msgstr "Il tuo ID MXit"
+msgstr "Il tuo ID MXit..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Invita di nuovo"
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
@@ -6222,27 +6243,8 @@
 msgid "Enable splash-screen popup"
 msgstr "Abilita lo splash screen"
 
-#. you were kicked
-#, fuzzy
-msgid "You have been kicked from this MultiMX."
-msgstr "Sei stato cacciato: (%s)"
-
-#, fuzzy
-msgid "was kicked"
-msgstr "Biglietto non valido"
-
-#, fuzzy
-msgid "_Room Name:"
-msgstr "_Stanza:"
-
-#. Display system message in chat window
-#, fuzzy
-msgid "You have invited"
-msgstr "C'竪 posta per te!"
-
-#, fuzzy
 msgid "Last Online"
-msgstr "Online"
+msgstr "Connesso l'ultima volta"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
@@ -7009,6 +7011,8 @@
 "You required encryption in your account settings, but one of the servers "
 "doesn't support it."
 msgstr ""
+"Hai richiesto la crittografia nelle impostazioni del tuo account, ma uno dei "
+"server non la supporta."
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
@@ -7016,9 +7020,8 @@
 msgid "Error requesting %s: %s"
 msgstr "Errore nella richiesta di %s: %s"
 
-#, fuzzy
 msgid "The server returned an empty response"
-msgstr "Impossibile connettersi: il server ha fornito una risposta vuota."
+msgstr "Il server ha fornito una risposta vuota"
 
 msgid ""
 "Server requested that you fill out a CAPTCHA in order to sign in, but this "
@@ -7328,6 +7331,8 @@
 "You required encryption in your account settings, but encryption is not "
 "supported by your system."
 msgstr ""
+"Hai richiesto la crittografia nelle impostazioni del tuo account, ma la "
+"crittografia non 竪 supportata dal tuo sistema."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -7528,6 +7533,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Sei stato disconnesso dalla stanza di discussione %s."
 
+msgid "The new formatting is invalid."
+msgstr "La nuova formattazione non 竪 valida."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"La formattazione del nome utente pu嘆 modificare solo le maiuscole/minuscole "
+"e gli spazi bianchi."
+
 msgid "Pop-Up Message"
 msgstr "Messaggio pop-up"
 
@@ -7802,20 +7815,11 @@
 msgid "ICQ Privacy Options"
 msgstr "Opzioni per la privacy di ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "La nuova formattazione non 竪 valida."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"La formattazione del nome utente pu嘆 modificare solo le maiuscole/minuscole "
-"e gli spazi bianchi."
-
 msgid "Change Address To:"
 msgstr "Cambia l'indirizzo in:"
 
-#, fuzzy
 msgid "you are not waiting for authorization"
-msgstr "<i>non stai attendendo nessuna autorizzazione</i>"
+msgstr "non stai attendendo nessuna autorizzazione"
 
 msgid "You are awaiting authorization from the following buddies"
 msgstr "Stai attendendo autorizzazione dai seguenti contatti"
@@ -7853,13 +7857,11 @@
 msgid "Set Privacy Options..."
 msgstr "Imposta le opzioni per la privacy..."
 
-#, fuzzy
 msgid "Show Visible List"
-msgstr "Mostra la _lista contatti"
-
-#, fuzzy
+msgstr "Mostra la lista \"visibile\""
+
 msgid "Show Invisible List"
-msgstr "Lista degli inviti"
+msgstr "Mostra la lista \"invisibile\""
 
 #. AIM actions
 msgid "Confirm Account"
@@ -7877,9 +7879,8 @@
 msgid "Search for Buddy by Email Address..."
 msgstr "Cerca un contatto per indirizzo email..."
 
-#, fuzzy
 msgid "Don't use encryption"
-msgstr "Richiedi autorizzazione"
+msgstr "Non usare la crittografia"
 
 msgid "Use clientLogin"
 msgstr "Usa clientLogin"
@@ -7922,86 +7923,6 @@
 "per le Immagini IM. Poich辿 verr� rivelato il tuo indirizzo IP, devi "
 "considerare la cosa come un potenziale rischio per la tua privacy."
 
-#, fuzzy
-msgid "Invalid SNAC"
-msgstr "ID non valido"
-
-msgid "Server rate limit exceeded"
-msgstr ""
-
-msgid "Client rate limit exceeded"
-msgstr ""
-
-#, fuzzy
-msgid "Service unavailable"
-msgstr "Servizio non disponibile"
-
-#, fuzzy
-msgid "Service not defined"
-msgstr "Conferenza non trovata"
-
-msgid "Obsolete SNAC"
-msgstr ""
-
-#, fuzzy
-msgid "Not supported by host"
-msgstr "Non supportato"
-
-#, fuzzy
-msgid "Not supported by client"
-msgstr "Non supportato"
-
-msgid "Refused by client"
-msgstr ""
-
-msgid "Reply too big"
-msgstr ""
-
-#, fuzzy
-msgid "Responses lost"
-msgstr "Probabilit� di risposta:"
-
-#, fuzzy
-msgid "Request denied"
-msgstr "Richiesta in corso"
-
-msgid "Busted SNAC payload"
-msgstr ""
-
-msgid "Insufficient rights"
-msgstr ""
-
-msgid "In local permit/deny"
-msgstr ""
-
-msgid "Warning level too high (sender)"
-msgstr ""
-
-msgid "Warning level too high (receiver)"
-msgstr ""
-
-#, fuzzy
-msgid "User temporarily unavailable"
-msgstr "Servizio temporaneamente non disponibile"
-
-#, fuzzy
-msgid "No match"
-msgstr "Nessuna corrispondenza"
-
-#, fuzzy
-msgid "List overflow"
-msgstr "Lista piena"
-
-#, fuzzy
-msgid "Request ambiguous"
-msgstr "Richiesta in corso"
-
-msgid "Queue full"
-msgstr ""
-
-msgid "Not while on AOL"
-msgstr ""
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Icona per il contatto"
@@ -8046,7 +7967,7 @@
 msgstr "Vecchio ICQ UTF8"
 
 msgid "Trillian Encryption"
-msgstr "Crittazione di trillian"
+msgstr "Crittografia di Trillian"
 
 msgid "ICQ UTF8"
 msgstr "ICQ UTF8"
@@ -8120,58 +8041,123 @@
 msgid "Capabilities"
 msgstr "Capacit�"
 
+msgid "Invalid SNAC"
+msgstr "SNAC non valido"
+
+msgid "Server rate limit exceeded"
+msgstr "Velocit� del server superata"
+
+msgid "Client rate limit exceeded"
+msgstr "Velocit� del client superata"
+
+msgid "Service unavailable"
+msgstr "Servizio non disponibile"
+
+msgid "Service not defined"
+msgstr "Servizio non definito"
+
+msgid "Obsolete SNAC"
+msgstr "SNAC obsoleto"
+
+msgid "Not supported by host"
+msgstr "Non supportato dal server"
+
+msgid "Not supported by client"
+msgstr "Non supportato dal client"
+
+msgid "Refused by client"
+msgstr "Rifiutato dal client"
+
+msgid "Reply too big"
+msgstr "Risposta troppo grande"
+
+msgid "Responses lost"
+msgstr "Risposte perse"
+
+msgid "Request denied"
+msgstr "Richiesta negata"
+
+msgid "Busted SNAC payload"
+msgstr ""
+
+msgid "Insufficient rights"
+msgstr "Permessi insufficienti"
+
+msgid "In local permit/deny"
+msgstr ""
+
+msgid "Warning level too high (sender)"
+msgstr "Livello di allerta troppo elevato (mittente)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Livello di allerta troppo elevato (destinatario)"
+
+msgid "User temporarily unavailable"
+msgstr "Utente temporaneamente non disponibile"
+
+msgid "No match"
+msgstr "Nessuna corrispondenza"
+
+msgid "List overflow"
+msgstr "Overflow della lista"
+
+msgid "Request ambiguous"
+msgstr "Richiesta ambigua"
+
+msgid "Queue full"
+msgstr "Coda piena"
+
+msgid "Not while on AOL"
+msgstr "Non possibile su AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
 msgid "Appear Online"
-msgstr "Appai come in linea"
+msgstr "Mostrati come in linea"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user when your status is set to
 #. Invisible (this is the default).
-#, fuzzy
 msgid "Don't Appear Online"
-msgstr "Appai come in linea"
+msgstr "Non mostrarti come in linea"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to always appear offline to the chosen user (even when your status
 #. isn't Invisible).
 msgid "Appear Offline"
-msgstr "Sembra non in linea"
+msgstr "Mostrati come non in linea"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user if you are invisible, and
 #. appear online to the chosen user if you are not invisible (this is the
 #. default).
-#, fuzzy
 msgid "Don't Appear Offline"
-msgstr "Sembra non in linea"
-
-#, fuzzy
+msgstr "Non mostrarti come non in linea"
+
 msgid "you have no buddies on this list"
-msgstr "Sei stato cacciato: (%s)"
-
-#, fuzzy, c-format
+msgstr "non hai nessun contatto su questa lista"
+
+#, c-format
 msgid ""
 "You can add a buddy to this list by right-clicking on them and selecting \"%s"
 "\""
 msgstr ""
-"Puoi richiedere nuovamente autorizzazione da questi contatti cliccando col "
-"tasto destro su di essi e scegliendo \"Richiedi nuovamente autorizzazione\""
-
-#, fuzzy
+"Puoi aggiungere un contatto a questa lista facendo clic con il pulsante "
+"destro sul suo nome e scegliendo \"%s\""
+
 msgid "Visible List"
-msgstr "Visibile"
+msgstr "Lista \"visibile\""
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
 msgstr ""
-
-#, fuzzy
+"Questi contatti potranno vedere il tuo stato quando passi a \"Invisibile\""
+
 msgid "Invisible List"
-msgstr "Lista degli inviti"
+msgstr "Lista \"invisibile\""
 
 msgid "These buddies will always see you as offline"
-msgstr ""
+msgstr "Questi contatti ti vedranno sempre come non in linea"
 
 msgid "Aquarius"
 msgstr "Acquario"
@@ -8351,9 +8337,9 @@
 msgid "Your request was rejected."
 msgstr "La tua richiesta 竪 stata rifiutata."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requires verification: %s"
-msgstr "%u necessita di verifica"
+msgstr "%u necessita di verifica: %s"
 
 msgid "Add buddy question"
 msgstr "Domanda per l'aggiunta del contatto"
@@ -8716,14 +8702,14 @@
 msgid "Select Server"
 msgstr "Scegli un server"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Connetti utilizzando TCP"
@@ -8737,6 +8723,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Mostra la stanza di discussione all'arrivo di un messaggio"
 
+msgid "Use default font"
+msgstr "Usa il carattere predefinito"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Intervallo di \"Keep alive\" (secondi)"
 
@@ -10384,9 +10373,8 @@
 msgid "Ignore conference and chatroom invitations"
 msgstr "Ignora gli inviti a conferenze e a stanze di discussione"
 
-#, fuzzy
 msgid "Use account proxy for HTTP and HTTPS connections"
-msgstr "Usa un account proxy per le connessioni SSL"
+msgstr "Usa un account proxy per le connessioni HTTP e HTTPS"
 
 msgid "Chat room list URL"
 msgstr "URL della lista delle stanze di discussione"
@@ -10578,7 +10566,7 @@
 msgstr "Non 竪 nella lista del server"
 
 msgid "Appear Permanently Offline"
-msgstr "Appai permanentemente come non in linea"
+msgstr "Appari permanentemente come non in linea"
 
 msgid "Presence"
 msgstr "Presenza"
@@ -11297,9 +11285,9 @@
 "account, attraverso <b>Account->Gestisci account</b> nella finestra della "
 "Lista contatti."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"
-msgstr "%s%s%s%s vuole aggiungere %s alla sua lista dei contatti%s%s"
+msgstr "%s%s%s%s vuole aggiungerti (%s) alla sua lista dei contatti%s%s"
 
 #. Buddy List
 msgid "Background Color"
@@ -12287,9 +12275,6 @@
 msgid "Fatal Error"
 msgstr "Errore fatale"
 
-msgid "bug master"
-msgstr "signore dei bug"
-
 msgid "artist"
 msgstr "artista"
 
@@ -12466,9 +12451,11 @@
 msgid "Lao"
 msgstr "Lao"
 
-#, fuzzy
 msgid "Maithili"
-msgstr "Swahili"
+msgstr "Maithili"
+
+msgid "Meadow Mari"
+msgstr "Meadow Mari"
 
 msgid "Macedonian"
 msgstr "Macedone"
@@ -13259,13 +13246,11 @@
 msgid "Exiting because another libpurple client is already running.\n"
 msgstr "Uscita in corso, poich辿 竪 in esecuzione un altro client libpurple.\n"
 
-#, fuzzy
 msgid "_Media"
-msgstr "/_Media"
-
-#, fuzzy
+msgstr "_Media"
+
 msgid "_Hangup"
-msgstr "Riaggancia"
+msgstr "_Riaggancia"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
@@ -13323,7 +13308,7 @@
 msgstr "Nuovi allarmi"
 
 msgid "Dismiss"
-msgstr "Chiudi"
+msgstr "Rimuovi"
 
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">Hai degli avvisi!</span>"
@@ -13686,9 +13671,8 @@
 msgid "_TURN server:"
 msgstr "Server _TURN:"
 
-#, fuzzy
 msgid "_UDP Port:"
-msgstr "_Porta:"
+msgstr "Porta _UDP:"
 
 msgid "Use_rname:"
 msgstr "Nome u_tente:"
@@ -13712,7 +13696,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13736,11 +13720,11 @@
 
 #. Translators: please do not translate "chromium-browser" here!
 msgid "Chromium (chromium-browser)"
-msgstr ""
+msgstr "Chromium (chromium-browser)"
 
 #. Translators: please do not translate "chrome" here!
 msgid "Chromium (chrome)"
-msgstr ""
+msgstr "Chromium (chrome)"
 
 msgid "Manual"
 msgstr "Manuale"
@@ -14111,7 +14095,7 @@
 msgstr "Google Talk"
 
 msgid "Facebook (XMPP)"
-msgstr ""
+msgstr "Facebook (XMPP)"
 
 #, c-format
 msgid "The following error has occurred loading %s: %s"
@@ -14281,9 +14265,8 @@
 msgid "Small"
 msgstr "Piccolo"
 
-#, fuzzy
 msgid "Smaller versions of the default smileys"
-msgstr "Versione pi湛 piccola degli smiley predefiniti"
+msgstr "Versioni pi湛 piccole degli smiley predefiniti"
 
 msgid "Response Probability:"
 msgstr "Probabilit� di risposta:"
@@ -15324,9 +15307,8 @@
 msgid "Voice/Video Settings"
 msgstr "Impostazioni Voce/Video"
 
-#, fuzzy
 msgid "Voice and Video Settings"
-msgstr "Impostazioni Voce/Video"
+msgstr "Impostazioni voce e video"
 
 #. *< name
 #. *< version
@@ -15605,64 +15587,3 @@
 
 msgid "You do not have permission to uninstall this application."
 msgstr "Non hai il permesso per rimuovere questa applicazione."
-
-#~ msgid "An error occurred on the in-band bytestream transfer\n"
-#~ msgstr ""
-#~ "Si 竪 verificato un errore nel trasferimento del flusso di dati in-band\n"
-
-#~ msgid "Transfer was closed."
-#~ msgstr "Il trasferimento 竪 stato chiuso."
-
-#~ msgid "Failed to open in-band bytestream"
-#~ msgstr "Impossibile aprire il flusso di byte in-band"
-
-#~ msgid "Set your friendly name."
-#~ msgstr "Imposta un alias."
-
-#~ msgid "Error requesting %s"
-#~ msgstr "Errore nella richiesta di %s"
-
-#~ msgid "Require SSL/TLS"
-#~ msgstr "Richiedi SSL/TLS"
-
-#~ msgid "Force old (port 5223) SSL"
-#~ msgstr "Forza il vecchio SSL (porta 5223)"
-
-#~ msgid "The name you entered is invalid."
-#~ msgstr "Il nome immesso non 竪 valido."
-
-#~ msgid ""
-#~ "[Unable to display a message from this user because it contained invalid "
-#~ "characters.]"
-#~ msgstr ""
-#~ "[Impossibile mostrare un messaggio da questo utente poich辿 contiene "
-#~ "caratteri non validi.]"
-
-#~ msgid "Search for Buddy by Information"
-#~ msgstr "Cerca un contatto per informazione"
-
-#~ msgid "The certificate is not valid yet."
-#~ msgstr "Il certificato non 竪 ancora valido."
-
-#~ msgid "The nick name you entered is invalid."
-#~ msgstr "Il nickname immesso non 竪 valido"
-
-#~ msgid "MXit Login Name"
-#~ msgstr "Nome di login per MXit"
-
-#~ msgid "Nick Name"
-#~ msgstr "Nickname"
-
-#~ msgid "Your Mobile Number..."
-#~ msgstr "Il tuo numero di cellulare..."
-
-#, fuzzy
-#~ msgid "Rate to host"
-#~ msgstr "Invita in chat"
-
-#, fuzzy
-#~ msgid "Rate to client"
-#~ msgstr "Ultimo client conosciuto"
-
-#~ msgid "/Media/_Hangup"
-#~ msgstr "/Media/_Riaggancia"
--- a/po/nl.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/nl.po	Sun Mar 13 18:14:04 2011 +0000
@@ -8,9 +8,9 @@
 msgstr ""
 "Project-Id-Version: pidgin 2.7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-14 10:45+0100\n"
-"Last-Translator: Dingoe <translations@gvmelle.com>\n"
+"POT-Creation-Date: 2011-03-10 01:07-0800\n"
+"PO-Revision-Date: 2011-03-05 20:39+0100\n"
+"Last-Translator: Gideon van Melle <translations@gvmelle.com>\n"
 "Language-Team: Dutch <translations@gvmelle.com>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
@@ -156,7 +156,7 @@
 
 #, c-format
 msgid "%s%s%s%s has made %s his or her buddy%s%s"
-msgstr "%s%s%s%s heeft %s in zijn/haar vriendt gemaakt%s%s"
+msgstr "%s%s%s%s heeft %s in zijn/haar vriend gemaakt%s%s"
 
 msgid "Add buddy to your list?"
 msgstr "Vriend toevoegen aan uw lijst?"
@@ -2365,8 +2365,12 @@
 "Pad voor opslaan bestanden\n"
 "(Geef spv het volledige pad)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Automatisch verwerpen van gebruikers die niet in vriendenlijst staan"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Als een bestandsoverdracht aanvraag komt van gebruiker die\n"
+"*niet\" op uw vriendenlijst staat:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2379,6 +2383,9 @@
 msgid "Create a new directory for each user"
 msgstr "Een nieuwe map voor elke gebruiker aanmaken"
 
+msgid "Escape the filenames"
+msgstr "*Escape* de bestandsnamen"
+
 msgid "Notes"
 msgstr "Notities"
 
@@ -3246,9 +3253,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Voornaam"
 
@@ -3862,7 +3867,10 @@
 "Server vereist een waarmerking via tekstaanmelding via een ongecodeerde "
 "datastroom"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Ongeldig antwoord van server"
 
@@ -4008,7 +4016,6 @@
 msgid "Postal Code"
 msgstr "Postcode"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Land"
 
@@ -6105,6 +6112,10 @@
 msgid "Connecting..."
 msgstr "Bezig met Verbinden..."
 
+#, fuzzy
+msgid "The Display Name you entered is too short."
+msgstr "De schermnaam die u invoerde is ongeldig."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "De PINcode die u invulde heeft een ongeldige lengte [7-10]."
 
@@ -6178,33 +6189,6 @@
 msgid "Retrieving User Information..."
 msgstr "Ophalen Gebruikersinformatie..."
 
-msgid "Loading menu..."
-msgstr "Menu aan 't laden..."
-
-msgid "Status Message"
-msgstr "Status Bericht"
-
-msgid "Rejection Message"
-msgstr "Afgewezen bericht"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Verborgen nummer"
-
-msgid "Your MXit ID..."
-msgstr "Uw MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP Server"
-
-msgid "Connect via HTTP"
-msgstr "Verbinden via HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "inschakelen splashscreen pop-up"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "U bent uit deze MultiMX gegooid."
@@ -6219,6 +6203,47 @@
 msgid "You have invited"
 msgstr "U heeft uitgenodigd"
 
+msgid "Loading menu..."
+msgstr "Menu aan 't laden..."
+
+msgid "Status Message"
+msgstr "Status Bericht"
+
+msgid "Rejection Message"
+msgstr "Afgewezen bericht"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Verborgen nummer"
+
+# niet aanwezig/beschikbaar
+#, fuzzy
+msgid "No profile available"
+msgstr "Niet beschikbaar"
+
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "Dit hotmail account heeft geen ingeschakelde e-mail."
+
+msgid "Your MXit ID..."
+msgstr "Uw MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+#, fuzzy
+msgid "Re-Invite"
+msgstr "Uitnodigen"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP Server"
+
+msgid "Connect via HTTP"
+msgstr "Verbinden via HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "inschakelen splashscreen pop-up"
+
 msgid "Last Online"
 msgstr "Laatste Online"
 
@@ -7507,6 +7532,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "De verbinding met chatruimte %s is verbroken"
 
+msgid "The new formatting is invalid."
+msgstr "De nieuwe formattering is ongeldig."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Kan alleen hoofdletter en spaties veranderen aan de formattering van de "
+"gebruikersnaam."
+
 msgid "Pop-Up Message"
 msgstr "Pop-up bericht"
 
@@ -7777,14 +7810,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ privacy-opties"
 
-msgid "The new formatting is invalid."
-msgstr "De nieuwe formattering is ongeldig."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Kan alleen hoofdletter en spaties veranderen aan de formattering van de "
-"gebruikersnaam."
-
 msgid "Change Address To:"
 msgstr "Adres veranderen in: "
 
@@ -7892,75 +7917,6 @@
 "afbeeldingen via chatberichten). Dit zou als een inbreuk op de privacy "
 "beschouwd kunnen worden omdat de ander dan uw IP-adres te weten komt."
 
-msgid "Invalid SNAC"
-msgstr "Ongeldige SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "Server snelheidslimiet overschreden"
-
-msgid "Client rate limit exceeded"
-msgstr "Cli谷nt snelheidslimiet overschreden"
-
-msgid "Service unavailable"
-msgstr "Service niet beschikbaar"
-
-msgid "Service not defined"
-msgstr "Service niet gedefinieerd"
-
-msgid "Obsolete SNAC"
-msgstr "Verouderde SNAC"
-
-msgid "Not supported by host"
-msgstr "Niet ondersteund door computer"
-
-msgid "Not supported by client"
-msgstr "Niet ondersteund door cli谷nt"
-
-msgid "Refused by client"
-msgstr "Gewegerd door cli谷nt"
-
-msgid "Reply too big"
-msgstr "Antwoord te groot"
-
-msgid "Responses lost"
-msgstr "Reacties verloren"
-
-msgid "Request denied"
-msgstr "Aanvraag geweigerd"
-
-msgid "Busted SNAC payload"
-msgstr "SNAC bagage kapot"
-
-msgid "Insufficient rights"
-msgstr "Niet genoeg rechten"
-
-msgid "In local permit/deny"
-msgstr "In lokale toestaan/weigeren"
-
-msgid "Warning level too high (sender)"
-msgstr "Waarschuwingsniveau te hoog (verzender)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Waarschuwingsniveau te hoog (ontvanger)"
-
-msgid "User temporarily unavailable"
-msgstr "Gebruiker tijdelijk niet beschikbaar"
-
-msgid "No match"
-msgstr "Geen overeenkomstige resultaten"
-
-msgid "List overflow"
-msgstr "Te grote lijst"
-
-msgid "Request ambiguous"
-msgstr "Dubieuze aanvraag"
-
-msgid "Queue full"
-msgstr "Wachtrij vol"
-
-msgid "Not while on AOL"
-msgstr "Niet tijdens AOL"
-
 # msgstr ""
 # "(Er is een fout opgetreden bij het ontvangen van het bericht. Of jij en %s "
 # "hebben verschillende coderingen geselecteerd of de andere persoon gebruikt "
@@ -8083,6 +8039,75 @@
 msgid "Capabilities"
 msgstr "Mogelijkheden"
 
+msgid "Invalid SNAC"
+msgstr "Ongeldige SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Server snelheidslimiet overschreden"
+
+msgid "Client rate limit exceeded"
+msgstr "Cli谷nt snelheidslimiet overschreden"
+
+msgid "Service unavailable"
+msgstr "Service niet beschikbaar"
+
+msgid "Service not defined"
+msgstr "Service niet gedefinieerd"
+
+msgid "Obsolete SNAC"
+msgstr "Verouderde SNAC"
+
+msgid "Not supported by host"
+msgstr "Niet ondersteund door computer"
+
+msgid "Not supported by client"
+msgstr "Niet ondersteund door cli谷nt"
+
+msgid "Refused by client"
+msgstr "Gewegerd door cli谷nt"
+
+msgid "Reply too big"
+msgstr "Antwoord te groot"
+
+msgid "Responses lost"
+msgstr "Reacties verloren"
+
+msgid "Request denied"
+msgstr "Aanvraag geweigerd"
+
+msgid "Busted SNAC payload"
+msgstr "SNAC bagage kapot"
+
+msgid "Insufficient rights"
+msgstr "Niet genoeg rechten"
+
+msgid "In local permit/deny"
+msgstr "In lokale toestaan/weigeren"
+
+msgid "Warning level too high (sender)"
+msgstr "Waarschuwingsniveau te hoog (verzender)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Waarschuwingsniveau te hoog (ontvanger)"
+
+msgid "User temporarily unavailable"
+msgstr "Gebruiker tijdelijk niet beschikbaar"
+
+msgid "No match"
+msgstr "Geen overeenkomstige resultaten"
+
+msgid "List overflow"
+msgstr "Te grote lijst"
+
+msgid "Request ambiguous"
+msgstr "Dubieuze aanvraag"
+
+msgid "Queue full"
+msgstr "Wachtrij vol"
+
+msgid "Not while on AOL"
+msgstr "Niet tijdens AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8677,14 +8702,14 @@
 msgid "Select Server"
 msgstr "Selecteer Server"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Verbinden via TCP"
@@ -8698,6 +8723,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Toon chatruimte wanneer msg binnenkomt"
 
+msgid "Use default font"
+msgstr "Gebruik standaard lettertype"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Keepalive-interval (seconden)"
 
@@ -12256,9 +12284,6 @@
 msgid "Fatal Error"
 msgstr "Fatale fout"
 
-msgid "bug master"
-msgstr "bug master"
-
 msgid "artist"
 msgstr "artiest"
 
@@ -12438,6 +12463,9 @@
 msgid "Maithili"
 msgstr "Maithili"
 
+msgid "Meadow Mari"
+msgstr "Meadow Mari"
+
 msgid "Macedonian"
 msgstr "Macedonisch"
 
@@ -14430,7 +14458,7 @@
 msgstr "Server ondersteunt geen service discovery"
 
 msgid "XMPP Service Discovery"
-msgstr "XMPP Service Discovery"
+msgstr "XMPP Servicedetectie"
 
 msgid "Allows browsing and registering services."
 msgstr "Toestaan van browse en registatie services."
@@ -15584,6 +15612,13 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "U mag dit programma niet verwijderen."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr ""
+#~ "Automatisch verwerpen van gebruikers die niet in vriendenlijst staan"
+
+#~ msgid "bug master"
+#~ msgstr "bug master"
+
 #~ msgid "Error requesting %s"
 #~ msgstr "Fout opvragen  %s"
 
--- a/po/nn.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/nn.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,19 +1,19 @@
 #
-# Yngve Spjeld Landro <l10n@landro.net>, 2010.
+# Yngve Spjeld Landro <l10n@landro.net>, 2010, 2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gtranslator\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-14 04:02+0100\n"
+"POT-Creation-Date: 2011-03-10 01:13-0800\n"
+"PO-Revision-Date: 2011-02-08 17:03+0100\n"
 "Last-Translator: Yngve Spjeld Landro <l10n@landro.net>\n"
-"Language-Team: Norwegian Nynorsk <l10n@landro.net>\n"
+"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\n"
 "Language: nn\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\\n\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -36,7 +36,7 @@
 "  -v, --version       display the current version and exit\n"
 msgstr ""
 "%s\n"
-"Bruk: %s [VAL]��\n"
+"Bruk: %s [VAL] ��\n"
 "\n"
 "  -c, --config=DIR    bruk DIR som mappe for innstillingsfilene\n"
 "  -d, --debug         skriv ut feils淡kingsmeldingar til standard utkanal\n"
@@ -272,7 +272,7 @@
 msgstr "Opplysningar"
 
 msgid "Retrieving..."
-msgstr "Hentar��"
+msgstr "Hentar ��"
 
 msgid "Get Info"
 msgstr "Hent info"
@@ -346,7 +346,7 @@
 msgstr "P奪 mobil"
 
 msgid "New..."
-msgstr "Ny��"
+msgstr "Ny ��"
 
 msgid "Saved..."
 msgstr "Lagra��"
@@ -2357,9 +2357,12 @@
 "Fillagringsbane\n"
 "(f淡r opp heile filbana)"
 
-# var: Automatisk avvising fr奪 brukarar utanfor vennelista
-msgid "Automatically reject from users not in buddy list"
-msgstr "Automatisk avvising av brukarar utanfor vennelista"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"N奪r ein filoverf淡ringsf淡respurnad kjem fr奪 ein brukar som\n"
+"*ikkje* er i vennelista di:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2372,6 +2375,9 @@
 msgid "Create a new directory for each user"
 msgstr "Lag ein ny katalog for kvar brukar"
 
+msgid "Escape the filenames"
+msgstr "Vern filnamna (esc.-sekv.)"
+
 msgid "Notes"
 msgstr "Notat"
 
@@ -3211,9 +3217,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "F淡renamn"
 
@@ -3822,7 +3826,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Tenaren krev autentisering i klartekst over eit ukryptert samband"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Ugyldig svar fr奪 tenaren"
 
@@ -3965,7 +3972,6 @@
 msgid "Postal Code"
 msgstr "Postnummer"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Land"
 
@@ -4140,7 +4146,7 @@
 msgstr "_Tenar:"
 
 msgid "_Handle:"
-msgstr "R_eferanse:"
+msgstr "Re_feranse:"
 
 #, c-format
 msgid "%s is not a valid room name"
@@ -6055,6 +6061,10 @@
 msgid "Connecting..."
 msgstr "Koplar til��"
 
+#, fuzzy
+msgid "The Display Name you entered is too short."
+msgstr "Visingsnamnet du skreiv er ugyldig."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "PIN-en du skreiv nyttar ei ulovleg lengd [7-10]."
 
@@ -6123,34 +6133,6 @@
 msgid "Retrieving User Information..."
 msgstr "Hentar brukaropplysningar��"
 
-msgid "Loading menu..."
-msgstr "Lastar menyen��"
-
-msgid "Status Message"
-msgstr "Statusmelding"
-
-msgid "Rejection Message"
-msgstr "Avvisingsmelding"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Skjult nummer"
-
-msgid "Your MXit ID..."
-msgstr "MXit-id-en din��"
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP-tenar"
-
-msgid "Connect via HTTP"
-msgstr "Kopla til over HTTP"
-
-# ? treng gjennomsyn
-msgid "Enable splash-screen popup"
-msgstr "Bruk oppstartsvindauge"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "Du er blitt sparka ut fr奪 denne MultiMX-en."
@@ -6165,6 +6147,47 @@
 msgid "You have invited"
 msgstr "Du har invitert "
 
+msgid "Loading menu..."
+msgstr "Lastar menyen��"
+
+msgid "Status Message"
+msgstr "Statusmelding"
+
+msgid "Rejection Message"
+msgstr "Avvisingsmelding"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Skjult nummer"
+
+#, fuzzy
+msgid "No profile available"
+msgstr "Ikkje tilgjengeleg"
+
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "Denne kontoen har ikkje teke i bruk e-postfunksjonen."
+
+msgid "Your MXit ID..."
+msgstr "MXit-id-en din��"
+
+#. contact is in Deleted, Rejected or None state
+#, fuzzy
+msgid "Re-Invite"
+msgstr "Inviter"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP-tenar"
+
+msgid "Connect via HTTP"
+msgstr "Kopla til over HTTP"
+
+# ? treng gjennomsyn
+msgid "Enable splash-screen popup"
+msgstr "Bruk oppstartsvindauge"
+
 msgid "Last Online"
 msgstr "Sist tilkopla"
 
@@ -7429,6 +7452,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Du er blitt fr奪kopla praterommet %s."
 
+msgid "The new formatting is invalid."
+msgstr "Den nye formateringa er ugyldig."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Formatering av brukarnamnet vil berre endra store/sm奪 bokstavar og "
+"blankteikn."
+
 msgid "Pop-Up Message"
 msgstr "Sprettoppmelding"
 
@@ -7695,14 +7726,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ personvernval"
 
-msgid "The new formatting is invalid."
-msgstr "Den nye formateringa er ugyldig."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Formatering av brukarnamnet vil berre endra store/sm奪 bokstavar og "
-"blankteikn."
-
 msgid "Change Address To:"
 msgstr "Endra adressa til:"
 
@@ -7809,75 +7832,6 @@
 "for lynmeldingsbilete. Fordi IP-adressa vil bli avsl淡rt, blir dette sett p奪 "
 "som ein tryggleiksrisiko."
 
-msgid "Invalid SNAC"
-msgstr "Ugyldig SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "Overskriden tenargrense"
-
-msgid "Client rate limit exceeded"
-msgstr "Overskriden klientgrense"
-
-msgid "Service unavailable"
-msgstr "Tenesta er utilgjengeleg"
-
-msgid "Service not defined"
-msgstr "Tenesta er ikkje definert"
-
-msgid "Obsolete SNAC"
-msgstr "Forelda SNAC"
-
-msgid "Not supported by host"
-msgstr "Ikkje st淡tta av verten"
-
-msgid "Not supported by client"
-msgstr "Ikkje st淡tta av klienten"
-
-msgid "Refused by client"
-msgstr "Avvist av klienten"
-
-msgid "Reply too big"
-msgstr "Svaret er for stort"
-
-msgid "Responses lost"
-msgstr "Tapte svar"
-
-msgid "Request denied"
-msgstr "F淡rsepurnad avvist"
-
-msgid "Busted SNAC payload"
-msgstr "�delagt SNAC-pakkeinnhald"
-
-msgid "Insufficient rights"
-msgstr "Ikkje nok rettar"
-
-msgid "In local permit/deny"
-msgstr "I lokal tilgangs-/forbodsliste"
-
-msgid "Warning level too high (sender)"
-msgstr "For h淡gt 奪tvaringsniv奪 (sendar)"
-
-msgid "Warning level too high (receiver)"
-msgstr "For h淡gt 奪tvaringsniv奪 (mottakar)"
-
-msgid "User temporarily unavailable"
-msgstr "Brukaren er mellombels utilgjengeleg"
-
-msgid "No match"
-msgstr "Ikkje noko samsvar"
-
-msgid "List overflow"
-msgstr "Lista er full"
-
-msgid "Request ambiguous"
-msgstr "Uklar f淡respurnad"
-
-msgid "Queue full"
-msgstr "K淡en er full"
-
-msgid "Not while on AOL"
-msgstr "Ikkje n奪r p奪logga AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Venneikon"
@@ -7997,6 +7951,75 @@
 msgid "Capabilities"
 msgstr "Evner"
 
+msgid "Invalid SNAC"
+msgstr "Ugyldig SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Overskriden tenargrense"
+
+msgid "Client rate limit exceeded"
+msgstr "Overskriden klientgrense"
+
+msgid "Service unavailable"
+msgstr "Tenesta er utilgjengeleg"
+
+msgid "Service not defined"
+msgstr "Tenesta er ikkje definert"
+
+msgid "Obsolete SNAC"
+msgstr "Forelda SNAC"
+
+msgid "Not supported by host"
+msgstr "Ikkje st淡tta av verten"
+
+msgid "Not supported by client"
+msgstr "Ikkje st淡tta av klienten"
+
+msgid "Refused by client"
+msgstr "Avvist av klienten"
+
+msgid "Reply too big"
+msgstr "Svaret er for stort"
+
+msgid "Responses lost"
+msgstr "Tapte svar"
+
+msgid "Request denied"
+msgstr "F淡rsepurnad avvist"
+
+msgid "Busted SNAC payload"
+msgstr "�delagt SNAC-pakkeinnhald"
+
+msgid "Insufficient rights"
+msgstr "Ikkje nok rettar"
+
+msgid "In local permit/deny"
+msgstr "I lokal tilgangs-/forbodsliste"
+
+msgid "Warning level too high (sender)"
+msgstr "For h淡gt 奪tvaringsniv奪 (sendar)"
+
+msgid "Warning level too high (receiver)"
+msgstr "For h淡gt 奪tvaringsniv奪 (mottakar)"
+
+msgid "User temporarily unavailable"
+msgstr "Brukaren er mellombels utilgjengeleg"
+
+msgid "No match"
+msgstr "Ikkje noko samsvar"
+
+msgid "List overflow"
+msgstr "Lista er full"
+
+msgid "Request ambiguous"
+msgstr "Uklar f淡respurnad"
+
+msgid "Queue full"
+msgstr "K淡en er full"
+
+msgid "Not while on AOL"
+msgstr "Ikkje n奪r p奪logga AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8589,14 +8612,14 @@
 msgid "Select Server"
 msgstr "Vel tenar"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Kopla til med TCP"
@@ -8611,6 +8634,10 @@
 msgid "Show chat room when msg comes"
 msgstr "Vis praterommet n奪r meldinga kjem"
 
+#, fuzzy
+msgid "Use default font"
+msgstr "Bruk systemstandard"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Intervall vedlikehaldstilkopling (sekund)"
 
@@ -11352,19 +11379,19 @@
 msgstr "Skjul n奪r du er fr奪kopla"
 
 msgid "Show When Offline"
-msgstr "Vis n奪r du er fr奪kopla"
+msgstr "Vis n奪r du er fr_奪kopla"
 
 msgid "_Alias..."
-msgstr "Ka_llenamn��"
+msgstr "_Kallenamn ��"
 
 msgid "_Remove"
 msgstr "_Fjern"
 
 msgid "Set Custom Icon"
-msgstr "Tilpassa ikon"
+msgstr "_Tilpassa ikon"
 
 msgid "Remove Custom Icon"
-msgstr "Fjern eige ikon"
+msgstr "Fjern tilpa_ssa ikon"
 
 msgid "Add _Buddy..."
 msgstr "Legg til _venn��"
@@ -11383,16 +11410,16 @@
 msgstr "_Bli med"
 
 msgid "Auto-Join"
-msgstr "Automatisk p奪logging"
+msgstr "Bli med auto_matisk"
 
 msgid "Persistent"
-msgstr "Varig"
+msgstr "_Varig"
 
 msgid "_Edit Settings..."
-msgstr "Endra _innstillingar��"
+msgstr "Endra _innstillingar ��"
 
 msgid "_Collapse"
-msgstr "_Sl奪 saman"
+msgstr "Sl_奪 saman"
 
 msgid "_Expand"
 msgstr "_Utvid"
@@ -11426,16 +11453,16 @@
 msgstr "/_Venner"
 
 msgid "/Buddies/New Instant _Message..."
-msgstr "/Venner/_Ny lynmelding��"
+msgstr "/Venner/_Ny lynmelding ��"
 
 msgid "/Buddies/Join a _Chat..."
-msgstr "/Venner/G奪 inn i eit prater_om��"
+msgstr "/Venner/G奪 inn i eit prater_om ��"
 
 msgid "/Buddies/Get User _Info..."
-msgstr "/Venner/Hent brukar_info��"
+msgstr "/Venner/Hent brukar_info ��"
 
 msgid "/Buddies/View User _Log..."
-msgstr "/Venner/Vis brukar_logg��"
+msgstr "/Venner/Vis brukar_logg ��"
 
 msgid "/Buddies/Sh_ow"
 msgstr "/Venner/Vi_s"
@@ -11459,10 +11486,10 @@
 msgstr "/Venner/Sort_er vennene"
 
 msgid "/Buddies/_Add Buddy..."
-msgstr "/Venner/Legg til _venn��"
+msgstr "/Venner/Legg til _venn ��"
 
 msgid "/Buddies/Add C_hat..."
-msgstr "/Venner/Legg til _praterom��"
+msgstr "/Venner/Legg til _praterom ��"
 
 msgid "/Buddies/Add _Group..."
 msgstr "/Venner/Legg til _gruppe��"
@@ -11868,7 +11895,7 @@
 msgstr "/Samtale/T_淡m historikken"
 
 msgid "/Conversation/M_edia"
-msgstr "/Samtale/M_edia"
+msgstr "/Samtale/Me_dia"
 
 msgid "/Conversation/Media/_Audio Call"
 msgstr "/Samtale/Media/_Lydsamtale"
@@ -11877,13 +11904,13 @@
 msgstr "/Samtale/Media/_Biletsamtale"
 
 msgid "/Conversation/Media/Audio\\/Video _Call"
-msgstr "/Samtale/Media/Lyd\\/_Biletsamtale"
+msgstr "/Samtale/Media/Lyd-\\/bilets_amtale"
 
 msgid "/Conversation/Se_nd File..."
 msgstr "/Samtale/S_end fil��"
 
 msgid "/Conversation/Get _Attention"
-msgstr "/Samtale/F奪 _merksemd"
+msgstr "/Samtale/F_奪 merksemd"
 
 # var: /Samtale/Legg til _vennevarsling��
 msgid "/Conversation/Add Buddy _Pounce..."
@@ -11908,7 +11935,7 @@
 msgstr "/Samtale/_Avblokker��"
 
 msgid "/Conversation/_Add..."
-msgstr "/Samtale/Legg _til��"
+msgstr "/Samtale/Legg _til ��"
 
 msgid "/Conversation/_Remove..."
 msgstr "/Samtale/F_jern��"
@@ -12149,9 +12176,6 @@
 msgid "Fatal Error"
 msgstr "Alvorleg feil"
 
-msgid "bug master"
-msgstr "feilrettingsansvarleg"
-
 msgid "artist"
 msgstr "kunstnar"
 
@@ -12332,6 +12356,10 @@
 msgid "Maithili"
 msgstr "Maithili"
 
+#, fuzzy
+msgid "Meadow Mari"
+msgstr "Ny e-post"
+
 msgid "Macedonian"
 msgstr "Makedonsk"
 
@@ -12625,7 +12653,7 @@
 msgstr "Fjern venn"
 
 msgid "_Remove Buddy"
-msgstr "_Fjern venn"
+msgstr "Fje_rn venn"
 
 #, c-format
 msgid ""
@@ -13024,7 +13052,7 @@
 msgstr "Sletta loggen?"
 
 msgid "Delete Log..."
-msgstr "Sletta loggen��"
+msgstr "Sletta loggen ��"
 
 #, c-format
 msgid "<span size='larger' weight='bold'>Conversation in %s on %s</span>"
@@ -13300,7 +13328,7 @@
 msgstr "_Bla gjennom��"
 
 msgid "Br_owse..."
-msgstr "Bl_a gjennom��"
+msgstr "Bl_a gjennom ��"
 
 # kanskje endra sidan "F_淡rehandsvis" 嘆g gjeld lydar?
 msgid "Pre_view"
@@ -13346,7 +13374,7 @@
 msgstr "Sendt ei melding"
 
 msgid "Unknown.... Please report this!"
-msgstr "Ukjend�� . Rapporter feilen."
+msgstr "Ukjend �� . Rapporter feilen."
 
 msgid "(Custom)"
 msgstr "(tilpassa)"
@@ -13534,13 +13562,13 @@
 msgstr "Sl奪 p奪 automatisk port_vidaresending"
 
 msgid "_Manually specify range of ports to listen on:"
-msgstr "F淡r opp _portrekkje det skal lyttast til:"
+msgstr "F淡r opp portr_ekkje det skal lyttast til:"
 
 msgid "_Start:"
-msgstr "_Start:"
+msgstr "_start:"
 
 msgid "_End:"
-msgstr "_Slutt:"
+msgstr "s_lutt:"
 
 #. TURN server
 msgid "Relay Server (TURN)"
@@ -13743,7 +13771,7 @@
 msgstr "Spel"
 
 msgid "_Browse..."
-msgstr "Bla _gjennom��"
+msgstr "Bla _gjennom ��"
 
 msgid "_Reset"
 msgstr "_Nullstill"
@@ -13870,7 +13898,7 @@
 msgstr "Vel nytt namn"
 
 msgid "Select Folder..."
-msgstr "Vel mappe��"
+msgstr "Vel mappe ��"
 
 #. list button
 msgid "_Get List"
@@ -13959,10 +13987,10 @@
 msgstr "Ventar p奪 nettverkssamband"
 
 msgid "New status..."
-msgstr "Ny tilstand��"
+msgstr "Ny tilstand ��"
 
 msgid "Saved statuses..."
-msgstr "Lagra tilstandar��"
+msgstr "Lagra tilstandar ��"
 
 msgid "Status Selector"
 msgstr "Tilstandsveljar"
@@ -14113,10 +14141,10 @@
 msgstr "_Inviter"
 
 msgid "_Modify..."
-msgstr "E_ndra��"
+msgstr "E_ndra ��"
 
 msgid "_Add..."
-msgstr "L_egg til��"
+msgstr "L_egg til ��"
 
 msgid "_Open Mail"
 msgstr "_Opna e-post"
@@ -14211,7 +14239,7 @@
 msgstr "Bruk siste vennen n奪r poengstillinga er lik"
 
 msgid "Point values to use for account..."
-msgstr "Poengverdiar som kontoen kan nytta��"
+msgstr "Poengverdiar som kontoen kan nytta ��"
 
 #. *< type
 #. *< ui_requirement
@@ -15092,7 +15120,7 @@
 msgstr "24-timars tidsformat"
 
 msgid "Show dates in..."
-msgstr "Vis datoar i��"
+msgstr "Vis datoar i ��"
 
 msgid "Co_nversations:"
 msgstr "_Samtalar:"
@@ -15441,6 +15469,13 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "Du har ikkje rettar til 奪 avinstallera dette programmet."
 
+#~ msgid "bug master"
+#~ msgstr "feilrettingsansvarleg"
+
+# var: Automatisk avvising fr奪 brukarar utanfor vennelista
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "Automatisk avvising av brukarar utanfor vennelista"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "Overf淡ringa av samtidsdatastraumen feila\n"
 
--- a/po/oc.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/oc.po	Sun Mar 13 18:14:04 2011 +0000
@@ -12,13 +12,14 @@
 # D'autres documents utiles peuvent 棚tre consult辿s sur lo projet de
 # traduction de GNOME.
 # http://wiki.traduc.org/gnomefr/
+# �ric Boumaour <zongo_fr@users.sourceforge.net>, 2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2008-05-09 01:31+0200\n"
+"POT-Creation-Date: 2011-02-02 23:34-0500\n"
+"PO-Revision-Date: 2011-01-09 00:11+0100\n"
 "Last-Translator: �ric Boumaour <zongo_fr@users.sourceforge.net>\n"
 "Language-Team: fr <fr@li.org>\n"
 "Language: \n"
@@ -63,7 +64,7 @@
 msgstr ""
 
 msgid "Account was not added"
-msgstr ""
+msgstr "Compte pas apondut"
 
 msgid "Username of an account must be non-empty."
 msgstr ""
@@ -89,17 +90,16 @@
 msgstr ""
 
 msgid "Modify Account"
-msgstr ""
+msgstr "Modificar lo compte"
 
 msgid "New Account"
-msgstr ""
+msgstr "Compte nov竪l"
 
 msgid "Protocol:"
 msgstr "Protoc嘆l :"
 
-#, fuzzy
 msgid "Username:"
-msgstr "_Nom d'utilizaire :"
+msgstr "Nom d'utilizaire :"
 
 msgid "Password:"
 msgstr "Mot de pas�:"
@@ -126,7 +126,7 @@
 msgstr ""
 
 msgid "Delete Account"
-msgstr ""
+msgstr "Suprimir lo compte"
 
 #. Delete button
 msgid "Delete"
@@ -207,7 +207,7 @@
 msgstr ""
 
 msgid "Add in group"
-msgstr ""
+msgstr "Apondre al grop"
 
 msgid "Account"
 msgstr "Compte"
@@ -219,7 +219,7 @@
 msgstr ""
 
 msgid "Chats"
-msgstr ""
+msgstr "Charradissas"
 
 #. Extract their Name and put it in
 msgid "Name"
@@ -259,7 +259,7 @@
 msgstr ""
 
 msgid "Edit"
-msgstr "Edicion"
+msgstr "Modificar"
 
 msgid "Edit Settings"
 msgstr ""
@@ -277,10 +277,10 @@
 msgstr ""
 
 msgid "Send File"
-msgstr "_Enviar un fichi竪r"
+msgstr "Mandar un fichi竪r"
 
 msgid "Blocked"
-msgstr ""
+msgstr "Blocat"
 
 msgid "Show when offline"
 msgstr ""
@@ -344,19 +344,19 @@
 msgstr "Nov竪l..."
 
 msgid "Saved..."
-msgstr ""
+msgstr "Enregistrats..."
 
 msgid "Plugins"
 msgstr "Ajustons"
 
 msgid "Block/Unblock"
-msgstr ""
+msgstr "Blocar/desblocar"
 
 msgid "Block"
-msgstr ""
+msgstr "Blocar"
 
 msgid "Unblock"
-msgstr ""
+msgstr "Desblocar"
 
 msgid ""
 "Please enter the username or alias of the person you would like to Block/"
@@ -385,7 +385,7 @@
 msgstr ""
 
 msgid "Join"
-msgstr ""
+msgstr "J坦nher"
 
 msgid ""
 "Please enter the username or alias of the person whose log you would like to "
@@ -400,7 +400,7 @@
 msgstr ""
 
 msgid "Block/Unblock..."
-msgstr ""
+msgstr "Blocar/desblocar..."
 
 msgid "Join Chat..."
 msgstr ""
@@ -418,7 +418,7 @@
 msgstr ""
 
 msgid "Offline buddies"
-msgstr ""
+msgstr "Los contactes desconnectats"
 
 msgid "Sort"
 msgstr "Ordenar"
@@ -436,7 +436,7 @@
 msgstr ""
 
 msgid "Chat"
-msgstr "Chad"
+msgstr "Charradissa"
 
 msgid "Grouping"
 msgstr ""
@@ -590,7 +590,7 @@
 msgstr ""
 
 msgid "Conversation"
-msgstr ""
+msgstr "Charradissa"
 
 msgid "Clear Scrollback"
 msgstr ""
@@ -601,9 +601,8 @@
 msgid "Add Buddy Pounce..."
 msgstr ""
 
-#, fuzzy
 msgid "Invite..."
-msgstr "Convidar"
+msgstr "Convidar..."
 
 msgid "Enable Logging"
 msgstr ""
@@ -711,15 +710,15 @@
 msgid "Pause"
 msgstr "Pausa"
 
-#, fuzzy, c-format
+#, c-format
 msgid "File Transfers - %d%% of %d file"
 msgid_plural "File Transfers - %d%% of %d files"
-msgstr[0] "Transferriment de fichi竪rs"
-msgstr[1] "Transferriment de fichi竪rs"
+msgstr[0] ""
+msgstr[1] ""
 
 #. Create the window.
 msgid "File Transfers"
-msgstr "Transferriment de fichi竪rs"
+msgstr "Transferiment de fichi竪rs"
 
 msgid "Progress"
 msgstr "Avan巽ament"
@@ -763,9 +762,8 @@
 msgid "%.2f KiB/s"
 msgstr "%.2f ko/s"
 
-#, fuzzy
 msgid "Sent"
-msgstr "Definir"
+msgstr "Mandat"
 
 msgid "Received"
 msgstr ""
@@ -777,9 +775,8 @@
 msgid "The file was saved as %s."
 msgstr ""
 
-#, fuzzy
 msgid "Sending"
-msgstr "Segondas"
+msgstr "A mandar"
 
 msgid "Receiving"
 msgstr ""
@@ -828,14 +825,13 @@
 msgstr ""
 
 msgid "All Conversations"
-msgstr ""
+msgstr "Totas las charradissas"
 
 msgid "System Log"
 msgstr ""
 
-#, fuzzy
 msgid "Calling..."
-msgstr "A calcular..."
+msgstr ""
 
 msgid "Hangup"
 msgstr ""
@@ -910,9 +906,8 @@
 #. XXX: The following expects that finch_notify_message gets called. This
 #. * may not always happen, e.g. when another plugin sets its own
 #. * notify_message. So tread carefully.
-#, fuzzy
 msgid "URI"
-msgstr "URL"
+msgstr "URI"
 
 msgid "ERROR"
 msgstr "ERROR"
@@ -1033,7 +1028,7 @@
 msgstr ""
 
 msgid "Send a message"
-msgstr ""
+msgstr "Mandar un messatge"
 
 msgid "Execute a command"
 msgstr ""
@@ -1167,7 +1162,7 @@
 msgstr ""
 
 msgid "Open File..."
-msgstr ""
+msgstr "Dobrir un fichi竪r..."
 
 msgid "Choose Location..."
 msgstr ""
@@ -1212,9 +1207,8 @@
 msgid "Someone says your username in chat"
 msgstr ""
 
-#, fuzzy
 msgid "Attention received"
-msgstr "L'autentificacion a abocat"
+msgstr ""
 
 msgid "GStreamer Failure"
 msgstr ""
@@ -1311,7 +1305,7 @@
 msgstr "T鱈tol"
 
 msgid "Type"
-msgstr "Tipe"
+msgstr "Mena"
 
 #. Statuses are almost all the same. Define a macro to reduce code repetition.
 #. PurpleStatusPrimitive
@@ -1482,9 +1476,8 @@
 msgid "TinyURL (or other) address prefix"
 msgstr ""
 
-#, fuzzy
 msgid "TinyURL"
-msgstr "URL"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
 msgstr ""
@@ -1503,7 +1496,7 @@
 msgstr ""
 
 msgid "Offline Buddies"
-msgstr ""
+msgstr "Contactes desconnectats"
 
 msgid "Online/Offline"
 msgstr ""
@@ -1598,7 +1591,7 @@
 msgstr "Desconegut"
 
 msgid "Buddies"
-msgstr ""
+msgstr "Contactes"
 
 msgid "buddy list"
 msgstr ""
@@ -1745,10 +1738,10 @@
 msgstr ""
 
 msgid "Send Message"
-msgstr "Enviar un messatge"
+msgstr "Mandar un messatge"
 
 msgid "_Send Message"
-msgstr "_Enviar un messatge"
+msgstr "_Mandar un messatge"
 
 #, c-format
 msgid "%s entered the room."
@@ -1774,9 +1767,8 @@
 msgid "%s left the room (%s)."
 msgstr ""
 
-#, fuzzy
 msgid "Invite to chat"
-msgstr "Convidar"
+msgstr "Convidar a una charradissa"
 
 #. Put our happy label in it.
 msgid ""
@@ -1837,7 +1829,7 @@
 msgstr ""
 
 msgid "Unknown reason"
-msgstr "Rason desconeguda"
+msgstr ""
 
 #, c-format
 msgid ""
@@ -1926,9 +1918,9 @@
 msgid "File transfer cancelled"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s cancelled the transfer of %s"
-msgstr "%s a chang辿 son 辿tat de %s en %s."
+msgstr ""
 
 #, c-format
 msgid "%s cancelled the file transfer"
@@ -2121,9 +2113,8 @@
 msgid "Error with your webcam"
 msgstr ""
 
-#, fuzzy
 msgid "Conference error"
-msgstr "Error de connexion"
+msgstr ""
 
 #, c-format
 msgid "Error creating session: %s"
@@ -2189,13 +2180,13 @@
 msgstr ""
 
 msgid "_Save"
-msgstr "_Enregistrar"
+msgstr "Enregi_strar"
 
 msgid "_Cancel"
 msgstr "_Anullar"
 
 msgid "Ask"
-msgstr ""
+msgstr "Demandar"
 
 msgid "Auto Accept"
 msgstr ""
@@ -2212,7 +2203,9 @@
 "(Please provide the full path)"
 msgstr ""
 
-msgid "Automatically reject from users not in buddy list"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
 msgstr ""
 
 msgid ""
@@ -2223,6 +2216,9 @@
 msgid "Create a new directory for each user"
 msgstr ""
 
+msgid "Escape the filenames"
+msgstr ""
+
 msgid "Notes"
 msgstr "N嘆tas"
 
@@ -2462,7 +2458,7 @@
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
 msgid "QIP"
-msgstr ""
+msgstr "QIP"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
@@ -2474,13 +2470,13 @@
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
 msgid "Trillian"
-msgstr ""
+msgstr "Trillian"
 
 #. The names of IM clients are marked for translation at the request of
 #. translators who wanted to transliterate them.  Many translators
 #. choose to leave them alone.  Choose what's best for your language.
 msgid "aMSN"
-msgstr ""
+msgstr "aMSN"
 
 #. Add general preferences.
 msgid "General Log Reading Configuration"
@@ -2573,7 +2569,7 @@
 msgstr ""
 
 msgid "Offline Message"
-msgstr ""
+msgstr "Messatge desconnectat"
 
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
 msgstr ""
@@ -2590,9 +2586,8 @@
 msgid "Do not ask. Always save in pounce."
 msgstr ""
 
-#, fuzzy
 msgid "One Time Password"
-msgstr "Picatz lo mot de pas"
+msgstr ""
 
 #. *< type
 #. *< ui_requirement
@@ -2700,7 +2695,7 @@
 #. *< priority
 #. *< id
 msgid "GNUTLS"
-msgstr ""
+msgstr "GNUTLS"
 
 #. *< name
 #. *< version
@@ -2716,7 +2711,7 @@
 #. *< priority
 #. *< id
 msgid "NSS"
-msgstr ""
+msgstr "NSS"
 
 #. *< name
 #. *< version
@@ -2851,7 +2846,7 @@
 msgstr ""
 
 msgid "Bonjour"
-msgstr ""
+msgstr "Bonjour"
 
 #, c-format
 msgid "%s has closed the conversation."
@@ -2908,9 +2903,8 @@
 msgid "You must fill in all registration fields"
 msgstr ""
 
-#, fuzzy
 msgid "Passwords do not match"
-msgstr "Los mots de pas son pas los meteisses."
+msgstr "Los mots de pas son pas los meteisses"
 
 msgid "Unable to register new account.  An unknown error occurred."
 msgstr ""
@@ -2930,9 +2924,8 @@
 msgid "Enter captcha text"
 msgstr ""
 
-#, fuzzy
 msgid "Captcha"
-msgstr "Enregistrar l'imatge"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr ""
@@ -3031,7 +3024,7 @@
 msgstr "Absent(a)"
 
 msgid "UIN"
-msgstr ""
+msgstr "UIN"
 
 #. first name
 #. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
@@ -3088,9 +3081,9 @@
 msgid "Chat _name:"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "Impossible de dobrir le fichi竪r '%s' : %s"
+msgstr ""
 
 #. 1. connect to server
 #. connect to the server
@@ -3103,9 +3096,8 @@
 msgid "This chat name is already in use"
 msgstr ""
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "Connectat"
+msgstr "S竪tz pas connectat al servidor"
 
 msgid "Find buddies..."
 msgstr ""
@@ -3146,9 +3138,8 @@
 msgid "Gadu-Gadu User"
 msgstr ""
 
-#, fuzzy
 msgid "GG server"
-msgstr "Connectat"
+msgstr "Servidor GG"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3187,9 +3178,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr "Connectat"
+msgstr ""
 
 msgid "View MOTD"
 msgstr ""
@@ -3270,9 +3261,9 @@
 msgid "Ban on %s by %s, set %s ago"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Ban on %s"
-msgstr "Rason : %s"
+msgstr ""
 
 msgid "End of ban list"
 msgstr ""
@@ -3289,10 +3280,10 @@
 msgstr ""
 
 msgid " <i>(ircop)</i>"
-msgstr ""
+msgstr " <i>(ircop)</i>"
 
 msgid " <i>(identified)</i>"
-msgstr ""
+msgstr " <i>(identificat)</i>"
 
 msgid "Nick"
 msgstr "Escais"
@@ -3400,9 +3391,8 @@
 msgid "The nickname \"%s\" is already being used."
 msgstr ""
 
-#, fuzzy
 msgid "Nickname in use"
-msgstr "Escais"
+msgstr ""
 
 msgid "Cannot change nick"
 msgstr ""
@@ -3585,7 +3575,7 @@
 msgstr ""
 
 msgid "PONG"
-msgstr ""
+msgstr "PONG"
 
 msgid "CTCP PING reply"
 msgstr ""
@@ -3605,7 +3595,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr ""
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr ""
 
@@ -3639,17 +3632,15 @@
 "Allow this and continue authentication?"
 msgstr ""
 
-#, fuzzy
 msgid "SASL authentication failed"
-msgstr "L'autentificacion a abocat"
+msgstr ""
 
 #, c-format
 msgid "SASL error: %s"
 msgstr ""
 
-#, fuzzy
 msgid "Invalid Encoding"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid "Unsupported Extension"
 msgstr ""
@@ -3673,16 +3664,14 @@
 msgid "User not found"
 msgstr "Utilizaire pas trobat"
 
-#, fuzzy
 msgid "Invalid Username Encoding"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid "Resource Constraint"
 msgstr ""
 
-#, fuzzy
 msgid "Unable to canonicalize username"
-msgstr "Activat"
+msgstr ""
 
 msgid "Unable to canonicalize password"
 msgstr ""
@@ -3705,9 +3694,9 @@
 msgid "Unable to establish a connection with the server"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr "Connectat"
+msgstr ""
 
 msgid "Unable to establish SSL connection"
 msgstr ""
@@ -3746,7 +3735,7 @@
 
 #. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
-msgstr "Pa鱈s"
+msgstr "Pa誰s"
 
 #. lots of clients (including purple) do this, but it's
 #. * out of spec
@@ -3782,14 +3771,13 @@
 msgstr ""
 
 msgid "Client"
-msgstr ""
+msgstr "Client"
 
 msgid "Operating System"
 msgstr "Sist竪ma d'explotacion"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "Fichi竪r local :"
+msgstr "Ora locala"
 
 msgid "Priority"
 msgstr "Prioritat"
@@ -3797,16 +3785,15 @@
 msgid "Resource"
 msgstr "Ressorga"
 
-#, fuzzy
 msgid "Uptime"
-msgstr "Data"
+msgstr ""
 
 msgid "Logged Off"
 msgstr ""
 
 #, c-format
 msgid "%s ago"
-msgstr ""
+msgstr "%s i a"
 
 msgid "Middle Name"
 msgstr ""
@@ -3850,7 +3837,7 @@
 msgstr ""
 
 msgid "Log In"
-msgstr ""
+msgstr "Connexion"
 
 msgid "Log Out"
 msgstr "Desconnectar"
@@ -3860,7 +3847,7 @@
 
 #. last name
 msgid "Last Name"
-msgstr "Nom"
+msgstr ""
 
 msgid "The following are the results of your search"
 msgstr ""
@@ -3971,17 +3958,14 @@
 msgid "Find Rooms"
 msgstr ""
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "Ali�s :"
-
-#, fuzzy
+msgstr ""
+
 msgid "No users found"
-msgstr "Utilizaire pas trobat"
-
-#, fuzzy
+msgstr ""
+
 msgid "Roles:"
-msgstr "R嘆tle"
+msgstr "R嘆tles :"
 
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
 msgstr ""
@@ -3989,9 +3973,8 @@
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr ""
 
-#, fuzzy
 msgid "Ping timed out"
-msgstr "Connectat"
+msgstr ""
 
 msgid "Invalid XMPP ID"
 msgstr ""
@@ -4030,7 +4013,7 @@
 msgstr ""
 
 msgid "State"
-msgstr "Estat"
+msgstr ""
 
 msgid "Postal code"
 msgstr ""
@@ -4058,7 +4041,7 @@
 msgstr ""
 
 msgid "Register"
-msgstr "Enregistrar"
+msgstr "S'enregistrar"
 
 #, c-format
 msgid "Change Account Registration at %s"
@@ -4111,7 +4094,7 @@
 msgstr "De"
 
 msgid "To"
-msgstr "A"
+msgstr "Destinacion"
 
 msgid "None (To pending)"
 msgstr ""
@@ -4129,13 +4112,11 @@
 msgid "Allow Buzz"
 msgstr ""
 
-#, fuzzy
 msgid "Mood Name"
-msgstr "Nom de grop"
-
-#, fuzzy
+msgstr ""
+
 msgid "Mood Comment"
-msgstr "Entresenhas"
+msgstr ""
 
 #. primitive
 #. ID
@@ -4407,9 +4388,8 @@
 msgid "Unable to initiate media with %s: not subscribed to user presence"
 msgstr ""
 
-#, fuzzy
 msgid "Media Initiation Failed"
-msgstr "L'autentificacion a abocat"
+msgstr ""
 
 #, c-format
 msgid ""
@@ -4505,9 +4485,8 @@
 msgid "Use old-style SSL"
 msgstr ""
 
-#, fuzzy
 msgid "Connection security"
-msgstr "Connexion perduda"
+msgstr ""
 
 msgid "Allow plaintext auth over unencrypted streams"
 msgstr ""
@@ -4525,7 +4504,7 @@
 msgstr ""
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "URL BOSH"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
@@ -4538,7 +4517,7 @@
 
 #, c-format
 msgid "Message from %s"
-msgstr "Messatge de %s"
+msgstr ""
 
 #, c-format
 msgid "%s has set the topic to: %s"
@@ -4596,9 +4575,8 @@
 msgid "_Accept Defaults"
 msgstr ""
 
-#, fuzzy
 msgid "No reason"
-msgstr "Rason desconeguda"
+msgstr "Pas de rason"
 
 #, c-format
 msgid "You have been kicked: (%s)"
@@ -4634,23 +4612,20 @@
 msgid "Please select the resource of %s to which you would like to send a file"
 msgstr ""
 
-#, fuzzy
 msgid "Afraid"
 msgstr "Arab"
 
-#, fuzzy
 msgid "Amazed"
-msgstr "Animar"
+msgstr ""
 
 msgid "Amorous"
 msgstr ""
 
 msgid "Angry"
-msgstr ""
-
-#, fuzzy
+msgstr "Encolerat"
+
 msgid "Annoyed"
-msgstr "Qual que si叩"
+msgstr ""
 
 msgid "Anxious"
 msgstr ""
@@ -4664,73 +4639,59 @@
 msgid "Bored"
 msgstr ""
 
-#, fuzzy
 msgid "Brave"
-msgstr "Enregistrar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Calm"
-msgstr "Anullar"
+msgstr ""
 
 msgid "Cautious"
 msgstr ""
 
-#, fuzzy
 msgid "Cold"
-msgstr "Gras"
-
-#, fuzzy
+msgstr ""
+
 msgid "Confident"
-msgstr "Se connectar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Confused"
-msgstr "Contunhar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Contemplative"
-msgstr "Se connectar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Contented"
-msgstr "Connectat"
-
-#, fuzzy
+msgstr ""
+
 msgid "Cranky"
-msgstr "Entrepresa"
+msgstr ""
 
 msgid "Crazy"
 msgstr ""
 
-#, fuzzy
 msgid "Creative"
-msgstr "Crear"
+msgstr ""
 
 msgid "Curious"
 msgstr ""
 
-#, fuzzy
 msgid "Dejected"
-msgstr "executar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Depressed"
-msgstr "Suprimir"
-
-#, fuzzy
+msgstr ""
+
 msgid "Disappointed"
-msgstr "_Desactivar"
+msgstr ""
 
 msgid "Disgusted"
 msgstr ""
 
-#, fuzzy
 msgid "Dismayed"
-msgstr "_Desactivar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Distracted"
-msgstr "_Desactivar"
+msgstr ""
 
 msgid "Embarrassed"
 msgstr ""
@@ -4744,9 +4705,8 @@
 msgid "Flirtatious"
 msgstr ""
 
-#, fuzzy
 msgid "Frustrated"
-msgstr "Pichon nom"
+msgstr ""
 
 msgid "Grateful"
 msgstr ""
@@ -4754,13 +4714,11 @@
 msgid "Grieving"
 msgstr ""
 
-#, fuzzy
 msgid "Grumpy"
-msgstr "Grop"
-
-#, fuzzy
+msgstr ""
+
 msgid "Guilty"
-msgstr "Ciutat"
+msgstr ""
 
 msgid "Happy"
 msgstr ""
@@ -4768,9 +4726,8 @@
 msgid "Hopeful"
 msgstr ""
 
-#, fuzzy
 msgid "Hot"
-msgstr "_�ste :"
+msgstr "Caud"
 
 msgid "Humbled"
 msgstr ""
@@ -4778,9 +4735,8 @@
 msgid "Humiliated"
 msgstr ""
 
-#, fuzzy
 msgid "Hungry"
-msgstr "Ongr辿s"
+msgstr ""
 
 msgid "Hurt"
 msgstr ""
@@ -4794,17 +4750,14 @@
 msgid "In love"
 msgstr ""
 
-#, fuzzy
 msgid "Indignant"
-msgstr "Indonesian"
-
-#, fuzzy
+msgstr ""
+
 msgid "Interested"
-msgstr "Interfa巽"
-
-#, fuzzy
+msgstr "Interessat"
+
 msgid "Intoxicated"
-msgstr "Convidar"
+msgstr ""
 
 msgid "Invincible"
 msgstr ""
@@ -4812,62 +4765,50 @@
 msgid "Jealous"
 msgstr ""
 
-#, fuzzy
 msgid "Lonely"
-msgstr "Pas cap"
-
-#, fuzzy
+msgstr "Sol"
+
 msgid "Lost"
-msgstr "_�ste :"
+msgstr "�_ste :"
 
 msgid "Lucky"
 msgstr ""
 
-#, fuzzy
 msgid "Mean"
-msgstr "Aleman"
-
-#, fuzzy
+msgstr ""
+
 msgid "Moody"
-msgstr "Modificar"
+msgstr ""
 
 msgid "Nervous"
 msgstr ""
 
-#, fuzzy
 msgid "Neutral"
-msgstr "Defaut"
-
-#, fuzzy
+msgstr "Neutre"
+
 msgid "Offended"
-msgstr "Desconnectat"
+msgstr ""
 
 msgid "Outraged"
 msgstr ""
 
-#, fuzzy
 msgid "Playful"
-msgstr "Legir"
-
-#, fuzzy
+msgstr ""
+
 msgid "Proud"
-msgstr "Grop"
-
-#, fuzzy
+msgstr ""
+
 msgid "Relaxed"
-msgstr "Renommar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Relieved"
-msgstr "Suprimir"
-
-#, fuzzy
+msgstr ""
+
 msgid "Remorseful"
-msgstr "Suprimir"
-
-#, fuzzy
+msgstr ""
+
 msgid "Restless"
-msgstr "Enregistrar"
+msgstr ""
 
 msgid "Sad"
 msgstr ""
@@ -4878,9 +4819,8 @@
 msgid "Satisfied"
 msgstr ""
 
-#, fuzzy
 msgid "Serious"
-msgstr "Sons"
+msgstr ""
 
 msgid "Shocked"
 msgstr ""
@@ -4888,9 +4828,8 @@
 msgid "Shy"
 msgstr ""
 
-#, fuzzy
 msgid "Sick"
-msgstr "Escais"
+msgstr "Malaut"
 
 #. Sleepy / Tired
 msgid "Sleepy"
@@ -4899,13 +4838,11 @@
 msgid "Spontaneous"
 msgstr ""
 
-#, fuzzy
 msgid "Stressed"
-msgstr "Velocitat :"
-
-#, fuzzy
+msgstr ""
+
 msgid "Strong"
-msgstr "Arrestar"
+msgstr ""
 
 msgid "Surprised"
 msgstr ""
@@ -4916,13 +4853,11 @@
 msgid "Thirsty"
 msgstr ""
 
-#, fuzzy
 msgid "Tired"
-msgstr "Firebird"
-
-#, fuzzy
+msgstr "Las"
+
 msgid "Undefined"
-msgstr "Soslinhat"
+msgstr ""
 
 msgid "Weak"
 msgstr ""
@@ -4984,9 +4919,8 @@
 msgid "Already logged in"
 msgstr ""
 
-#, fuzzy
 msgid "Invalid username"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid "Invalid friendly name"
 msgstr ""
@@ -5190,9 +5124,8 @@
 msgid "Nudging %s..."
 msgstr ""
 
-#, fuzzy
 msgid "Email Address..."
-msgstr "Adre巽a electronica"
+msgstr "Adre巽a electronica..."
 
 msgid "Your new MSN friendly name is too long."
 msgstr ""
@@ -5201,23 +5134,20 @@
 msgid "Set friendly name for %s."
 msgstr ""
 
-#, fuzzy
 msgid "Set Friendly Name"
-msgstr "Nom d'ostal"
+msgstr ""
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr ""
 
-#, fuzzy
 msgid "This Location"
-msgstr "Empla巽ament"
+msgstr ""
 
 msgid "This is the name that identifies this location"
 msgstr ""
 
-#, fuzzy
 msgid "Other Locations"
-msgstr "Empla巽ament"
+msgstr "Autres empla巽aments"
 
 msgid "You can sign out from other locations here"
 msgstr ""
@@ -5286,9 +5216,8 @@
 msgid "Playing a game"
 msgstr ""
 
-#, fuzzy
 msgid "Working"
-msgstr "Professional"
+msgstr ""
 
 msgid "Has you"
 msgstr ""
@@ -5314,9 +5243,8 @@
 msgid "Out to Lunch"
 msgstr ""
 
-#, fuzzy
 msgid "Game Title"
-msgstr "T鱈tol"
+msgstr ""
 
 msgid "Office Title"
 msgstr ""
@@ -5324,9 +5252,8 @@
 msgid "Set Friendly Name..."
 msgstr ""
 
-#, fuzzy
 msgid "View Locations..."
-msgstr "Empla巽ament"
+msgstr ""
 
 msgid "Set Home Phone Number..."
 msgstr ""
@@ -5364,9 +5291,8 @@
 "be valid email addresses."
 msgstr ""
 
-#, fuzzy
 msgid "Unable to Add"
-msgstr "Activat"
+msgstr ""
 
 msgid "Authorization Request Message:"
 msgstr ""
@@ -5435,7 +5361,7 @@
 msgstr ""
 
 msgid "Personal"
-msgstr "Terminal"
+msgstr "Personal"
 
 msgid "Significant Other"
 msgstr ""
@@ -5466,7 +5392,7 @@
 
 #. Business
 msgid "Work"
-msgstr "Professional"
+msgstr ""
 
 msgid "Company"
 msgstr "Entrepresa"
@@ -5569,9 +5495,9 @@
 msgid "The following users are missing from your addressbook"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "Error desconeguda"
+msgstr ""
 
 msgid "Unable to add user"
 msgstr ""
@@ -5581,9 +5507,8 @@
 msgid "Unknown error (%d)"
 msgstr ""
 
-#, fuzzy
 msgid "Unable to remove user"
-msgstr "Activat"
+msgstr ""
 
 msgid "Mobile message was not sent because it was too long."
 msgstr ""
@@ -5735,9 +5660,8 @@
 msgid "The PIN is invalid. It should only consist of digits [0-9]."
 msgstr ""
 
-#, fuzzy
 msgid "The two PINs you entered do not match."
-msgstr "Los mots de pas son pas los meteisses."
+msgstr ""
 
 msgid "The Display Name you entered is invalid."
 msgstr ""
@@ -5771,16 +5695,14 @@
 
 #. display name
 #. nick name (required)
-#, fuzzy
 msgid "Display Name"
-msgstr "Nom d'ostal"
+msgstr ""
 
 #. hidden
 msgid "Hide my number"
 msgstr ""
 
 #. mobile number
-#, fuzzy
 msgid "Mobile Number"
 msgstr "Telef嘆n mobil"
 
@@ -5796,9 +5718,8 @@
 msgid "There is no splash-screen currently available"
 msgstr ""
 
-#, fuzzy
 msgid "About"
-msgstr "A prepaus de %s"
+msgstr "A prepaus"
 
 #. display / change profile
 msgid "Change Profile..."
@@ -5809,9 +5730,8 @@
 msgstr ""
 
 #. display plugin version
-#, fuzzy
 msgid "About..."
-msgstr "A prepaus de %s"
+msgstr "A prepaus..."
 
 #. the file is too big
 msgid "The file you are trying to send is too large!"
@@ -5828,9 +5748,8 @@
 "Unable to connect to the MXit server. Please check your server settings."
 msgstr ""
 
-#, fuzzy
 msgid "Connecting..."
-msgstr "Connexion"
+msgstr "Connexion..."
 
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr ""
@@ -5881,59 +5800,23 @@
 msgstr ""
 
 #. ask for input (required)
-#, fuzzy
 msgid "Enter Security Code"
-msgstr "Picatz lo mot de pas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Your Country"
-msgstr "Pa鱈s"
+msgstr "V嘆stre pa誰s"
 
 msgid "Your Language"
 msgstr ""
 
 #. display the form to the user and wait for his/her input
-#, fuzzy
 msgid "MXit Authorization"
-msgstr "Autorizar"
+msgstr ""
 
 msgid "MXit account validation"
 msgstr ""
 
-#, fuzzy
 msgid "Retrieving User Information..."
-msgstr "Entresenhas sul servidor"
-
-msgid "Loading menu..."
-msgstr ""
-
-#, fuzzy
-msgid "Status Message"
-msgstr "Messatges enviats"
-
-#, fuzzy
-msgid "Rejection Message"
-msgstr "Enviar un messatge"
-
-#. hidden number
-#, fuzzy
-msgid "Hidden Number"
-msgstr "L'expression es pas valida"
-
-msgid "Your MXit ID..."
-msgstr ""
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-#, fuzzy
-msgid "WAP Server"
-msgstr "Servidor"
-
-#, fuzzy
-msgid "Connect via HTTP"
-msgstr "Se connectar"
-
-msgid "Enable splash-screen popup"
 msgstr ""
 
 #. you were kicked
@@ -5943,7 +5826,6 @@
 msgid "was kicked"
 msgstr ""
 
-#, fuzzy
 msgid "_Room Name:"
 msgstr "_Sala :"
 
@@ -5951,18 +5833,43 @@
 msgid "You have invited"
 msgstr ""
 
-#, fuzzy
+msgid "Loading menu..."
+msgstr ""
+
+msgid "Status Message"
+msgstr ""
+
+msgid "Rejection Message"
+msgstr ""
+
+#. hidden number
+msgid "Hidden Number"
+msgstr ""
+
+msgid "Your MXit ID..."
+msgstr ""
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "Servidor WAP"
+
+msgid "Connect via HTTP"
+msgstr ""
+
+msgid "Enable splash-screen popup"
+msgstr ""
+
 msgid "Last Online"
-msgstr "En linha"
+msgstr ""
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
 msgstr ""
 
 #. packet could not be queued for transmission
-#, fuzzy
 msgid "Message Send Error"
-msgstr "Messatge de %s"
+msgstr ""
 
 msgid "Unable to process your request at this time"
 msgstr ""
@@ -5970,18 +5877,16 @@
 msgid "Timeout while waiting for a response from the MXit server."
 msgstr ""
 
-#, fuzzy
 msgid "Successfully Logged In..."
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 #, c-format
 msgid ""
 "%s sent you an encrypted message, but it is not supported on this client."
 msgstr ""
 
-#, fuzzy
 msgid "Message Error"
-msgstr "Messatge de %s"
+msgstr ""
 
 msgid "Cannot perform redirect using the specified protocol"
 msgstr ""
@@ -5997,38 +5902,30 @@
 msgid "Logout error: %s (%i)"
 msgstr ""
 
-#, fuzzy
 msgid "Contact Error"
-msgstr "Error de connexion"
+msgstr ""
 
 msgid "Message Sending Error"
 msgstr ""
 
-#, fuzzy
 msgid "Status Error"
-msgstr "Estatut"
-
-#, fuzzy
+msgstr ""
+
 msgid "Mood Error"
-msgstr "Error"
-
-#, fuzzy
+msgstr ""
+
 msgid "Invitation Error"
-msgstr "Error de connexion"
-
-#, fuzzy
+msgstr ""
+
 msgid "Contact Removal Error"
-msgstr "Error de connexion"
-
-#, fuzzy
+msgstr ""
+
 msgid "Subscription Error"
-msgstr "Error de connexion"
-
-#, fuzzy
+msgstr ""
+
 msgid "Contact Update Error"
-msgstr "Error de connexion"
-
-#, fuzzy
+msgstr ""
+
 msgid "File Transfer Error"
 msgstr "Transferiment de fichi竪r"
 
@@ -6038,9 +5935,8 @@
 msgid "MultiMx Invitation Error"
 msgstr ""
 
-#, fuzzy
 msgid "Profile Error"
-msgstr "Perfil"
+msgstr "Error de perfil"
 
 #. bad packet
 msgid "Invalid packet received from MXit."
@@ -6072,28 +5968,23 @@
 msgid "In Love"
 msgstr ""
 
-#, fuzzy
 msgid "Pending"
-msgstr "Segondas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Invited"
-msgstr "Convidar"
-
-#, fuzzy
+msgstr "Convidat"
+
 msgid "Rejected"
-msgstr "executar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Deleted"
-msgstr "Suprimir"
+msgstr "Suprimit"
 
 msgid "MXit Advertising"
 msgstr ""
 
-#, fuzzy
 msgid "More Information"
-msgstr "Entresenhas"
+msgstr ""
 
 #, c-format
 msgid "No such user: %s"
@@ -6120,9 +6011,8 @@
 msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)"
 msgstr ""
 
-#, fuzzy
 msgid "Lost connection with server"
-msgstr "Connectat"
+msgstr ""
 
 #. Can't write _()'d strings in array initializers. Workaround.
 #. khc: then use N_() in the array initializer and use _() when they are
@@ -6143,7 +6033,7 @@
 msgstr ""
 
 msgid "MySpace"
-msgstr ""
+msgstr "MySpace"
 
 msgid "IM Friends"
 msgstr ""
@@ -6254,7 +6144,7 @@
 msgstr ""
 
 msgid "Song"
-msgstr ""
+msgstr "Can巽on"
 
 msgid "Total Friends"
 msgstr ""
@@ -6519,9 +6409,9 @@
 msgid "Unknown error: 0x%X"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "Activat"
+msgstr ""
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6769,43 +6659,39 @@
 msgid "Bot account reached monthly IM limit"
 msgstr ""
 
-#, fuzzy
 msgid "Unable to receive offline messages"
-msgstr "Impossible de dobrir le fichi竪r '%s' : %s"
+msgstr ""
 
 msgid "Offline message store full"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message: %s (%s)"
-msgstr "Impossible de dobrir le fichi竪r '%s' : %s"
+msgstr ""
 
 #, c-format
 msgid "Unable to send message: %s"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to send message to %s: %s (%s)"
-msgstr "Impossible de dobrir le fichi竪r '%s' : %s"
-
-#, fuzzy, c-format
+msgstr ""
+
+#, c-format
 msgid "Unable to send message to %s: %s"
-msgstr "Impossible de dobrir le fichi竪r '%s' : %s"
+msgstr ""
 
 msgid "Thinking"
 msgstr ""
 
-#, fuzzy
 msgid "Shopping"
-msgstr "S'arr竪sta de picar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Questioning"
-msgstr "Estonian"
-
-#, fuzzy
+msgstr ""
+
 msgid "Eating"
-msgstr "Al竪rta"
+msgstr "A manjar"
 
 msgid "Watching a movie"
 msgstr ""
@@ -6825,9 +6711,8 @@
 msgid "Having fun"
 msgstr ""
 
-#, fuzzy
 msgid "Sleeping"
-msgstr "Segondas"
+msgstr "A dormir"
 
 msgid "Using a PDA"
 msgstr ""
@@ -6855,39 +6740,33 @@
 msgstr ""
 
 #. Playing video games
-#, fuzzy
 msgid "Gaming"
-msgstr "Al竪rta"
+msgstr ""
 
 msgid "Browsing the web"
 msgstr ""
 
-#, fuzzy
 msgid "Smoking"
-msgstr "Professional"
-
-#, fuzzy
+msgstr ""
+
 msgid "Writing"
-msgstr "Professional"
+msgstr ""
 
 #. Drinking [Alcohol]
-#, fuzzy
 msgid "Drinking"
-msgstr "Professional"
+msgstr ""
 
 msgid "Listening to music"
 msgstr ""
 
-#, fuzzy
 msgid "Studying"
-msgstr "Segondas"
+msgstr "A estudiar"
 
 msgid "In the restroom"
 msgstr ""
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "Connectat"
+msgstr ""
 
 #. *< type
 #. *< ui_requirement
@@ -6965,21 +6844,17 @@
 msgid "Invisible"
 msgstr "Invisible"
 
-#, fuzzy
 msgid "Evil"
-msgstr "Corri竪l"
-
-#, fuzzy
+msgstr ""
+
 msgid "Depression"
-msgstr "M竪stier"
-
-#, fuzzy
+msgstr ""
+
 msgid "At home"
-msgstr "A prepaus de %s"
-
-#, fuzzy
+msgstr "A l'ostal"
+
 msgid "At work"
-msgstr "Ret"
+msgstr "Al trabalh"
 
 msgid "At lunch"
 msgstr ""
@@ -7307,7 +7182,7 @@
 msgstr ""
 
 msgid "(no name)"
-msgstr ""
+msgstr "(pas de nom)"
 
 #, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
@@ -7350,9 +7225,8 @@
 msgid "iTunes Music Store Link"
 msgstr ""
 
-#, fuzzy
 msgid "Lunch"
-msgstr "Finch"
+msgstr ""
 
 #, c-format
 msgid "Buddy Comment for %s"
@@ -7383,9 +7257,8 @@
 msgid "Edit Buddy Comment"
 msgstr ""
 
-#, fuzzy
 msgid "Get X-Status Msg"
-msgstr "Messatges enviats"
+msgstr ""
 
 msgid "End Direct IM Session"
 msgstr ""
@@ -7451,17 +7324,15 @@
 msgid "Set Privacy Options..."
 msgstr ""
 
-#, fuzzy
 msgid "Show Visible List"
-msgstr "Ti竪ra de contactes"
-
-#, fuzzy
+msgstr ""
+
 msgid "Show Invisible List"
-msgstr "Invisible"
+msgstr ""
 
 #. AIM actions
 msgid "Confirm Account"
-msgstr ""
+msgstr "Confirmar lo compte"
 
 msgid "Display Currently Registered Email Address"
 msgstr ""
@@ -7511,6 +7382,124 @@
 "considered a privacy risk."
 msgstr ""
 
+#. Label
+msgid "Buddy Icon"
+msgstr ""
+
+msgid "Voice"
+msgstr "Votz"
+
+msgid "AIM Direct IM"
+msgstr ""
+
+msgid "Get File"
+msgstr ""
+
+msgid "Games"
+msgstr "J嘆cs"
+
+msgid "ICQ Xtraz"
+msgstr ""
+
+msgid "Add-Ins"
+msgstr ""
+
+msgid "Send Buddy List"
+msgstr ""
+
+msgid "ICQ Direct Connect"
+msgstr ""
+
+msgid "AP User"
+msgstr ""
+
+msgid "ICQ RTF"
+msgstr ""
+
+msgid "Nihilist"
+msgstr ""
+
+msgid "ICQ Server Relay"
+msgstr ""
+
+msgid "Old ICQ UTF8"
+msgstr ""
+
+msgid "Trillian Encryption"
+msgstr ""
+
+msgid "ICQ UTF8"
+msgstr ""
+
+msgid "Hiptop"
+msgstr ""
+
+msgid "Security Enabled"
+msgstr ""
+
+msgid "Video Chat"
+msgstr ""
+
+msgid "iChat AV"
+msgstr ""
+
+msgid "Live Video"
+msgstr ""
+
+msgid "Camera"
+msgstr "Aparelh de fotografiar"
+
+msgid "Screen Sharing"
+msgstr "Nom d'utilisateur"
+
+msgid "IP Address"
+msgstr "Adre巽a IP"
+
+msgid "Warning Level"
+msgstr ""
+
+msgid "Buddy Comment"
+msgstr ""
+
+#, c-format
+msgid "User information not available: %s"
+msgstr ""
+
+msgid "Mobile Phone"
+msgstr "Telef嘆n mobil"
+
+msgid "Personal Web Page"
+msgstr ""
+
+#. aim_userinfo_t
+#. use_html_status
+msgid "Additional Information"
+msgstr "Entresenhas suplement�rias"
+
+msgid "Zip Code"
+msgstr "C嘆di postal"
+
+msgid "Work Information"
+msgstr ""
+
+msgid "Division"
+msgstr "Division"
+
+msgid "Position"
+msgstr "Posicion"
+
+msgid "Web Page"
+msgstr "Pagina web"
+
+msgid "Online Since"
+msgstr ""
+
+msgid "Member Since"
+msgstr ""
+
+msgid "Capabilities"
+msgstr ""
+
 msgid "Invalid SNAC"
 msgstr ""
 
@@ -7580,125 +7569,6 @@
 msgid "Not while on AOL"
 msgstr ""
 
-#. Label
-msgid "Buddy Icon"
-msgstr ""
-
-msgid "Voice"
-msgstr "Votz"
-
-msgid "AIM Direct IM"
-msgstr ""
-
-msgid "Get File"
-msgstr ""
-
-msgid "Games"
-msgstr "J嘆cs"
-
-msgid "ICQ Xtraz"
-msgstr ""
-
-msgid "Add-Ins"
-msgstr ""
-
-msgid "Send Buddy List"
-msgstr ""
-
-msgid "ICQ Direct Connect"
-msgstr ""
-
-msgid "AP User"
-msgstr ""
-
-msgid "ICQ RTF"
-msgstr ""
-
-msgid "Nihilist"
-msgstr ""
-
-msgid "ICQ Server Relay"
-msgstr ""
-
-msgid "Old ICQ UTF8"
-msgstr ""
-
-msgid "Trillian Encryption"
-msgstr ""
-
-msgid "ICQ UTF8"
-msgstr ""
-
-msgid "Hiptop"
-msgstr ""
-
-msgid "Security Enabled"
-msgstr ""
-
-msgid "Video Chat"
-msgstr ""
-
-msgid "iChat AV"
-msgstr ""
-
-msgid "Live Video"
-msgstr ""
-
-msgid "Camera"
-msgstr "Aparelh de fotografiar"
-
-#, fuzzy
-msgid "Screen Sharing"
-msgstr "Nom d'utilisateur"
-
-msgid "IP Address"
-msgstr "Adre巽a IP"
-
-msgid "Warning Level"
-msgstr ""
-
-msgid "Buddy Comment"
-msgstr ""
-
-#, c-format
-msgid "User information not available: %s"
-msgstr ""
-
-msgid "Mobile Phone"
-msgstr "Telef嘆n mobil"
-
-msgid "Personal Web Page"
-msgstr ""
-
-#. aim_userinfo_t
-#. use_html_status
-msgid "Additional Information"
-msgstr "Entresenhas suplement�rias"
-
-msgid "Zip Code"
-msgstr "C嘆di postal"
-
-msgid "Work Information"
-msgstr ""
-
-msgid "Division"
-msgstr "Division"
-
-msgid "Position"
-msgstr "Posicion"
-
-msgid "Web Page"
-msgstr "Pagina web"
-
-msgid "Online Since"
-msgstr ""
-
-msgid "Member Since"
-msgstr ""
-
-msgid "Capabilities"
-msgstr ""
-
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -7733,16 +7603,14 @@
 "\""
 msgstr ""
 
-#, fuzzy
 msgid "Visible List"
-msgstr "Invisible"
+msgstr "Ti竪ra visibla"
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
 msgstr ""
 
-#, fuzzy
 msgid "Invisible List"
-msgstr "Invisible"
+msgstr "Ti竪ra invisibla"
 
 msgid "These buddies will always see you as offline"
 msgstr ""
@@ -7796,7 +7664,7 @@
 msgstr ""
 
 msgid "Dragon"
-msgstr ""
+msgstr "Dragon"
 
 msgid "Snake"
 msgstr ""
@@ -7805,36 +7673,34 @@
 msgstr ""
 
 msgid "Goat"
-msgstr ""
+msgstr "Cabra"
 
 msgid "Monkey"
-msgstr ""
+msgstr "Monin"
 
 msgid "Rooster"
 msgstr ""
 
 msgid "Dog"
-msgstr ""
+msgstr "Can"
 
 msgid "Pig"
-msgstr ""
+msgstr "Tesson"
 
 msgid "Other"
 msgstr "Autre"
 
-#, fuzzy
 msgid "Visible"
-msgstr "Invisible"
+msgstr "Visible"
 
 msgid "Friend Only"
 msgstr ""
 
-#, fuzzy
 msgid "Private"
-msgstr "Crear"
+msgstr "Privat"
 
 msgid "QQ Number"
-msgstr ""
+msgstr "Num竪ro QQ"
 
 msgid "Country/Region"
 msgstr ""
@@ -7848,9 +7714,8 @@
 msgid "Phone Number"
 msgstr ""
 
-#, fuzzy
 msgid "Authorize adding"
-msgstr "Autorizar"
+msgstr ""
 
 msgid "Cellphone Number"
 msgstr ""
@@ -7858,7 +7723,6 @@
 msgid "Personal Introduction"
 msgstr ""
 
-#, fuzzy
 msgid "City/Area"
 msgstr "Ciutat"
 
@@ -7874,67 +7738,54 @@
 msgid "Horoscope"
 msgstr ""
 
-#, fuzzy
 msgid "Zodiac"
 msgstr "Signe del zodiac"
 
-#, fuzzy
 msgid "Blood"
-msgstr "Gras"
+msgstr ""
 
 msgid "True"
-msgstr ""
-
-#, fuzzy
+msgstr "Verai"
+
 msgid "False"
-msgstr "Error"
-
-#, fuzzy
+msgstr "Fals"
+
 msgid "Modify Contact"
-msgstr "Entresenhas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Modify Address"
-msgstr "Adre巽a personala"
-
-#, fuzzy
+msgstr "Modificar l'adre巽a"
+
 msgid "Modify Extended Information"
-msgstr "Entresenhas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Modify Information"
-msgstr "Entresenhas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Update"
-msgstr "Data"
-
-#, fuzzy
+msgstr ""
+
 msgid "Could not change buddy information."
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 msgid "Note"
 msgstr "N嘆ta"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "Ti竪ra de contactes"
+msgstr ""
 
 msgid "Change his/her memo as you like"
 msgstr ""
 
-#, fuzzy
 msgid "_Modify"
-msgstr "Modificar"
-
-#, fuzzy
+msgstr "_Modificar"
+
 msgid "Memo Modify"
-msgstr "Modificar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Server says:"
-msgstr "_Servidor :"
+msgstr ""
 
 msgid "Your request was accepted."
 msgstr ""
@@ -7946,20 +7797,17 @@
 msgid "%u requires verification: %s"
 msgstr ""
 
-#, fuzzy
 msgid "Add buddy question"
-msgstr "Autorizar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Enter answer here"
-msgstr "Picatz lo mot de pas"
+msgstr ""
 
 msgid "Send"
-msgstr "Segondas"
-
-#, fuzzy
+msgstr "Mandar"
+
 msgid "Invalid answer."
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid "Authorization denied message:"
 msgstr ""
@@ -7971,9 +7819,8 @@
 msgid "%u needs authorization"
 msgstr ""
 
-#, fuzzy
 msgid "Add buddy authorize"
-msgstr "Autorizar"
+msgstr ""
 
 msgid "Enter request here"
 msgstr ""
@@ -7981,17 +7828,14 @@
 msgid "Would you be my friend?"
 msgstr ""
 
-#, fuzzy
 msgid "QQ Buddy"
-msgstr "Apondre lo contacte"
-
-#, fuzzy
+msgstr ""
+
 msgid "Add buddy"
-msgstr "Apondre lo contacte"
-
-#, fuzzy
+msgstr "Apondre un contacte"
+
 msgid "Invalid QQ Number"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid "Failed sending authorize"
 msgstr ""
@@ -8021,7 +7865,7 @@
 
 #, c-format
 msgid "Message: %s"
-msgstr ""
+msgstr "Messatge : %s"
 
 msgid "ID: "
 msgstr ""
@@ -8030,7 +7874,7 @@
 msgstr ""
 
 msgid "QQ Qun"
-msgstr ""
+msgstr "QQ Qun"
 
 msgid "Please enter Qun number"
 msgstr ""
@@ -8054,28 +7898,23 @@
 msgstr ""
 
 #. XXX: Should this be "Topic"?
-#, fuzzy
 msgid "Room Title"
-msgstr "T鱈tol"
-
-#, fuzzy
+msgstr ""
+
 msgid "Notice"
-msgstr "N嘆ta"
-
-#, fuzzy
+msgstr ""
+
 msgid "Detail"
-msgstr "Defaut"
+msgstr ""
 
 msgid "Creator"
 msgstr "Creator"
 
-#, fuzzy
 msgid "About me"
-msgstr "A prepaus de %s"
-
-#, fuzzy
+msgstr "A prepaus de ieu"
+
 msgid "Category"
-msgstr "Creator"
+msgstr "Categoria"
 
 msgid "The Qun does not allow others to join"
 msgstr ""
@@ -8086,9 +7925,9 @@
 msgid "Input request here"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Successfully joined Qun %s (%u)"
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 msgid "Successfully joined Qun"
 msgstr ""
@@ -8100,16 +7939,14 @@
 msgid "QQ Qun Operation"
 msgstr ""
 
-#, fuzzy
 msgid "Failed:"
-msgstr "Error"
+msgstr ""
 
 msgid "Join Qun, Unknown Reply"
 msgstr ""
 
-#, fuzzy
 msgid "Quit Qun"
-msgstr "Quitar"
+msgstr ""
 
 msgid ""
 "Note, if you are the creator, \n"
@@ -8119,13 +7956,11 @@
 msgid "Sorry, you are not our style"
 msgstr ""
 
-#, fuzzy
 msgid "Successfully changed Qun members"
-msgstr "Entresenhas sus l'utilizaire"
-
-#, fuzzy
+msgstr ""
+
 msgid "Successfully changed Qun information"
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 msgid "You have successfully created a Qun"
 msgstr ""
@@ -8152,13 +7987,13 @@
 msgid "<b>Joining Qun %u is approved by admin %u for %s</b>"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "<b>Removed buddy %u.</b>"
-msgstr "Suprimir un contacte"
-
-#, fuzzy, c-format
+msgstr ""
+
+#, c-format
 msgid "<b>New buddy %u joined.</b>"
-msgstr "Suprimir un contacte"
+msgstr ""
 
 #, c-format
 msgid "Unknown-%d"
@@ -8168,7 +8003,7 @@
 msgstr "Niv竪l"
 
 msgid " VIP"
-msgstr ""
+msgstr " VIP"
 
 msgid " TCP"
 msgstr ""
@@ -8180,9 +8015,8 @@
 msgstr ""
 
 msgid " Video"
-msgstr ""
-
-#, fuzzy
+msgstr " Vid竪o"
+
 msgid " Zone"
 msgstr "Pas cap"
 
@@ -8193,11 +8027,10 @@
 msgstr ""
 
 msgid "Invalid name"
-msgstr "L'expression es pas valida"
-
-#, fuzzy
+msgstr ""
+
 msgid "Select icon..."
-msgstr "Seleccionar una poli巽a"
+msgstr ""
 
 #, c-format
 msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n"
@@ -8253,7 +8086,7 @@
 
 #, c-format
 msgid "<b>IP</b>: %s<br>\n"
-msgstr ""
+msgstr "<b>IP</b> : %s<br>\n"
 
 msgid "Login Information"
 msgstr ""
@@ -8282,31 +8115,27 @@
 msgid "<i>Feel free to join us!</i> :)"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "About OpenQ %s"
-msgstr "A prepaus de %s"
-
-#, fuzzy
+msgstr "A prepaus d'OpenQ %s"
+
 msgid "Change Icon"
-msgstr "Modificar lo mot de pas"
+msgstr ""
 
 msgid "Change Password"
 msgstr "Modificar lo mot de pas"
 
-#, fuzzy
 msgid "Account Information"
-msgstr "Entresenhas"
+msgstr "Entresenhas sul compte"
 
 msgid "Update all QQ Quns"
 msgstr ""
 
-#, fuzzy
 msgid "About OpenQ"
-msgstr "A prepaus de %s"
-
-#, fuzzy
+msgstr "A prepaus d'OpenQ"
+
 msgid "Modify Buddy Memo"
-msgstr "Adre巽a personala"
+msgstr ""
 
 #. *< type
 #. *< ui_requirement
@@ -8318,34 +8147,29 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "QQ Protocol Plugin"
-msgstr "Protoc嘆l"
-
-#, fuzzy
+msgstr ""
+
 msgid "Auto"
-msgstr "Autor"
-
-#, fuzzy
+msgstr "Auto"
+
 msgid "Select Server"
-msgstr "Seleccionar un utilizaire"
-
-msgid "QQ2005"
-msgstr ""
-
-msgid "QQ2007"
 msgstr ""
 
 msgid "QQ2008"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ2008"
+
+msgid "QQ2007"
+msgstr "QQ2007"
+
+msgid "QQ2005"
+msgstr "QQ2005"
+
 msgid "Connect by TCP"
-msgstr "Se connectar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Show server notice"
-msgstr "Entresenhas sul servidor"
+msgstr ""
 
 msgid "Show server news"
 msgstr ""
@@ -8356,9 +8180,8 @@
 msgid "Keep alive interval (seconds)"
 msgstr ""
 
-#, fuzzy
 msgid "Update interval (seconds)"
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 msgid "Unable to decrypt server reply"
 msgstr ""
@@ -8367,9 +8190,9 @@
 msgid "Failed requesting token, 0x%02X"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Invalid token len, %d"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 #. extend redirect used in QQ2006
 msgid "Redirect_EX is not currently supported"
@@ -8378,9 +8201,8 @@
 #. need activation
 #. need activation
 #. need activation
-#, fuzzy
 msgid "Activation required"
-msgstr "L'autentificacion a abocat"
+msgstr "L'activacion a abocat"
 
 #, c-format
 msgid "Unknown reply code when logging in (0x%02X)"
@@ -8395,13 +8217,11 @@
 msgid "Failed captcha verification"
 msgstr ""
 
-#, fuzzy
 msgid "Captcha Image"
-msgstr "Enregistrar l'imatge"
-
-#, fuzzy
+msgstr ""
+
 msgid "Enter code"
-msgstr "Picatz lo mot de pas"
+msgstr ""
 
 msgid "QQ Captcha Verification"
 msgstr ""
@@ -8422,9 +8242,8 @@
 msgid "Socket error"
 msgstr ""
 
-#, fuzzy
 msgid "Getting server"
-msgstr "Connectat"
+msgstr ""
 
 msgid "Requesting token"
 msgstr ""
@@ -8432,33 +8251,30 @@
 msgid "Unable to resolve hostname"
 msgstr ""
 
-#, fuzzy
 msgid "Invalid server or port"
-msgstr "L'expression es pas valida"
-
-#, fuzzy
+msgstr ""
+
 msgid "Connecting to server"
-msgstr "Connectat"
-
-#, fuzzy
+msgstr "Connexion al servidor"
+
 msgid "QQ Error"
-msgstr "Error"
-
-#, fuzzy, c-format
+msgstr "Error QQ"
+
+#, c-format
 msgid ""
 "Server News:\n"
 "%s\n"
 "%s\n"
 "%s"
-msgstr "Servidor"
-
-#, fuzzy, c-format
+msgstr ""
+
+#, c-format
 msgid "%s:%s"
-msgstr "%s (%s)"
-
-#, fuzzy, c-format
+msgstr "%s:%s"
+
+#, c-format
 msgid "From %s:"
-msgstr "De"
+msgstr "De %s :"
 
 #, c-format
 msgid ""
@@ -8466,9 +8282,8 @@
 "%s"
 msgstr ""
 
-#, fuzzy
 msgid "Unknown SERVER CMD"
-msgstr "Rason desconeguda"
+msgstr ""
 
 #, c-format
 msgid ""
@@ -8476,20 +8291,17 @@
 "Room %u, reply 0x%02X"
 msgstr ""
 
-#, fuzzy
 msgid "QQ Qun Command"
-msgstr "Comanda"
+msgstr ""
 
 msgid "Unable to decrypt login reply"
 msgstr ""
 
-#, fuzzy
 msgid "Unknown LOGIN CMD"
-msgstr "Rason desconeguda"
-
-#, fuzzy
+msgstr ""
+
 msgid "Unknown CLIENT CMD"
-msgstr "Rason desconeguda"
+msgstr ""
 
 #, c-format
 msgid "%d has declined the file %s"
@@ -8674,7 +8486,7 @@
 msgstr ""
 
 msgid "Select User"
-msgstr "Seleccionar un utilizaire"
+msgstr "Causir l'utilizaire"
 
 msgid "Unable to add user: user not found"
 msgstr ""
@@ -9209,7 +9021,7 @@
 msgstr ""
 
 msgid "Personal Information"
-msgstr "Entresenhas personalas"
+msgstr ""
 
 msgid "Birth Day"
 msgstr ""
@@ -9308,7 +9120,7 @@
 msgstr ""
 
 msgid "Ping"
-msgstr "Ajuston"
+msgstr "Ping"
 
 msgid "Ping failed"
 msgstr ""
@@ -9367,9 +9179,8 @@
 msgid "Disconnected by server"
 msgstr ""
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
-msgstr "Connectat"
+msgstr ""
 
 msgid "Key Exchange failed"
 msgstr ""
@@ -9417,7 +9228,7 @@
 msgstr "SMS"
 
 msgid "MMS"
-msgstr ""
+msgstr "MMS"
 
 msgid "Video conferencing"
 msgstr ""
@@ -9642,7 +9453,7 @@
 msgstr ""
 
 msgid "HMAC"
-msgstr ""
+msgstr "HMAC"
 
 msgid "Use Perfect Forward Secrecy"
 msgstr ""
@@ -9693,7 +9504,7 @@
 
 #, c-format
 msgid "Country: \t%s\n"
-msgstr ""
+msgstr "Pa誰s : \t%s\n"
 
 #, c-format
 msgid "Algorithm: \t%s\n"
@@ -9705,7 +9516,7 @@
 
 #, c-format
 msgid "Version: \t%s\n"
-msgstr ""
+msgstr "Version : \t%s\n"
 
 #, c-format
 msgid ""
@@ -9810,9 +9621,8 @@
 msgid "Unable to create connection"
 msgstr ""
 
-#, fuzzy
 msgid "Unknown server response"
-msgstr "Rason desconeguda"
+msgstr ""
 
 msgid "Unable to create listen socket"
 msgstr ""
@@ -9820,9 +9630,8 @@
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr ""
 
-#, fuzzy
 msgid "SIP connect server not specified"
-msgstr "Entresenhas sul servidor"
+msgstr ""
 
 #. *< type
 #. *< ui_requirement
@@ -9879,9 +9688,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
-msgstr "Protoc嘆l"
+msgstr ""
 
 msgid "Pager port"
 msgstr ""
@@ -9917,9 +9725,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "Protoc嘆l"
+msgstr ""
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
@@ -9971,9 +9778,8 @@
 msgstr ""
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "Picatz lo mot de pas"
+msgstr ""
 
 #, c-format
 msgid ""
@@ -9994,9 +9800,8 @@
 msgid "Ignore buddy?"
 msgstr ""
 
-#, fuzzy
 msgid "Invalid username or password"
-msgstr "L'expression es pas valida"
+msgstr ""
 
 msgid ""
 "Your account has been locked due to too many failed login attempts.  Please "
@@ -10030,9 +9835,9 @@
 msgid "Received unexpected HTTP response from server"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr "Connectat"
+msgstr ""
 
 #, c-format
 msgid "Unable to establish a connection with %s: %s"
@@ -10238,9 +10043,8 @@
 msgid "User Rooms"
 msgstr ""
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
-msgstr "Connectat"
+msgstr ""
 
 msgid ""
 "(There was an error converting this message.\t Check the 'Encoding' option "
@@ -10259,7 +10063,7 @@
 msgstr ""
 
 msgid "Anyone"
-msgstr "Qual que si叩"
+msgstr ""
 
 msgid "_Class:"
 msgstr ""
@@ -10389,7 +10193,7 @@
 #. * A wrapper for purple_request_action() that uses @c Yes and @c No buttons.
 #.
 msgid "_Yes"
-msgstr "_�c"
+msgstr "�_c"
 
 msgid "_No"
 msgstr "_Non"
@@ -10431,17 +10235,15 @@
 msgstr ""
 
 #. Shortcut
-#, fuzzy
 msgid "Shortcut"
-msgstr "Ordenar"
+msgstr "Acorchi"
 
 msgid "The text-shortcut for the smiley"
 msgstr ""
 
 #. Stored Image
-#, fuzzy
 msgid "Stored Image"
-msgstr "Enregistrar l'imatge"
+msgstr ""
 
 msgid "Stored Image. (that'll have to do for now)"
 msgstr ""
@@ -10506,7 +10308,7 @@
 #.
 #, c-format
 msgid "%x %X"
-msgstr ""
+msgstr "%x %X"
 
 msgid "Calculating..."
 msgstr "A calcular..."
@@ -10518,37 +10320,37 @@
 msgid "%d second"
 msgid_plural "%d seconds"
 msgstr[0] "%d segonda"
-msgstr[1] "%d secondes"
+msgstr[1] "%d segondas"
 
 #, c-format
 msgid "%d day"
 msgid_plural "%d days"
 msgstr[0] "%d jorn"
-msgstr[1] "%d jours"
+msgstr[1] "%d jorns"
 
 #, c-format
 msgid "%s, %d hour"
 msgid_plural "%s, %d hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s, %d ora"
+msgstr[1] "%s, %d oras"
 
 #, c-format
 msgid "%d hour"
 msgid_plural "%d hours"
 msgstr[0] "%d ora"
-msgstr[1] "%d heures"
+msgstr[1] "%d oras"
 
 #, c-format
 msgid "%s, %d minute"
 msgid_plural "%s, %d minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%s, %d minuta"
+msgstr[1] "%s, %d minutas"
 
 #, c-format
 msgid "%d minute"
 msgid_plural "%d minutes"
 msgstr[0] "%d minuta"
-msgstr[1] "%d minutes"
+msgstr[1] "%d minutas"
 
 #, c-format
 msgid "Could not open %s: Redirected too many times"
@@ -10582,11 +10384,11 @@
 
 #, c-format
 msgid " - %s"
-msgstr ""
+msgstr " - %s"
 
 #, c-format
 msgid " (%s)"
-msgstr ""
+msgstr " (%s)"
 
 #. 10053
 msgid "Connection interrupted by other software on your computer."
@@ -10598,11 +10400,11 @@
 
 #. 10060
 msgid "Connection timed out."
-msgstr "Connectat"
+msgstr ""
 
 #. 10061
 msgid "Connection refused."
-msgstr "Connectat"
+msgstr ""
 
 #. 10048
 msgid "Address already in use."
@@ -10636,7 +10438,7 @@
 msgstr ""
 
 msgid "_Username:"
-msgstr "_Nom d'utilizaire :"
+msgstr "Nom d'_utilizaire :"
 
 msgid "Remember pass_word"
 msgstr ""
@@ -10655,9 +10457,8 @@
 msgid "Use this buddy _icon for this account:"
 msgstr ""
 
-#, fuzzy
 msgid "Ad_vanced"
-msgstr "_Avan巽at"
+msgstr "A_van巽at"
 
 msgid "Use GNOME Proxy Settings"
 msgstr ""
@@ -10672,10 +10473,10 @@
 msgstr "HTTP"
 
 msgid "SOCKS 4"
-msgstr ""
+msgstr "SOCKS 4"
 
 msgid "SOCKS 5"
-msgstr ""
+msgstr "SOCKS 5"
 
 msgid "Use Environmental Settings"
 msgstr ""
@@ -10696,7 +10497,7 @@
 msgstr ""
 
 msgid "_Host:"
-msgstr "_�ste :"
+msgstr "�_ste :"
 
 msgid "_Port:"
 msgstr "_P嘆rt :"
@@ -10719,9 +10520,8 @@
 msgid "Create _this new account on the server"
 msgstr ""
 
-#, fuzzy
 msgid "P_roxy"
-msgstr "Proxy"
+msgstr "P_roxy"
 
 msgid "Enabled"
 msgstr "Activat"
@@ -10753,9 +10553,8 @@
 msgid "The background color for the buddy list"
 msgstr ""
 
-#, fuzzy
 msgid "Layout"
-msgstr "Laossian"
+msgstr ""
 
 msgid "The layout of icons, name, and status of the buddy list"
 msgstr ""
@@ -10763,9 +10562,8 @@
 #. Group
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its expanded state
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "Color de fons"
+msgstr ""
 
 msgid "The background color of an expanded group"
 msgstr ""
@@ -10780,9 +10578,8 @@
 
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its collapsed state
-#, fuzzy
 msgid "Collapsed Background Color"
-msgstr "Color de fons"
+msgstr "Col"
 
 msgid "The background color of a collapsed group"
 msgstr ""
@@ -10798,63 +10595,56 @@
 #. Buddy
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list contact or chat room
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "Color de fons"
+msgstr ""
 
 msgid "The background color of a contact or chat"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list contact when in its expanded state
-#, fuzzy
 msgid "Contact Text"
-msgstr "Ordenar"
+msgstr ""
 
 msgid "The text information for when a contact is expanded"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
-#, fuzzy
 msgid "Online Text"
-msgstr "En linha"
+msgstr ""
 
 msgid "The text information for when a buddy is online"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is away
-#, fuzzy
 msgid "Away Text"
-msgstr "Absent(a)"
+msgstr "T竪xte dels contactes absents"
 
 msgid "The text information for when a buddy is away"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
-#, fuzzy
 msgid "Offline Text"
-msgstr "Desconnectat"
+msgstr ""
 
 msgid "The text information for when a buddy is offline"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
-#, fuzzy
 msgid "Idle Text"
-msgstr "Inactiu"
+msgstr ""
 
 msgid "The text information for when a buddy is idle"
 msgstr ""
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
-#, fuzzy
 msgid "Message Text"
-msgstr "Messatge"
+msgstr ""
 
 msgid "The text information for when a buddy has an unread message"
 msgstr ""
@@ -10888,9 +10678,8 @@
 msgid "Please update the necessary fields."
 msgstr ""
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "_Compte�:"
+msgstr "_Compte"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
@@ -10901,10 +10690,10 @@
 msgstr ""
 
 msgid "_Block"
-msgstr ""
+msgstr "_Blocar"
 
 msgid "Un_block"
-msgstr ""
+msgstr "Des_blocar"
 
 msgid "Move to"
 msgstr ""
@@ -10925,7 +10714,7 @@
 msgstr ""
 
 msgid "_Send File..."
-msgstr "_Enviar lo fichi竪r..."
+msgstr "_Mandar un fichi竪r..."
 
 msgid "Add Buddy _Pounce..."
 msgstr ""
@@ -10940,7 +10729,7 @@
 msgstr ""
 
 msgid "_Alias..."
-msgstr ""
+msgstr "_Ali�s..."
 
 msgid "_Remove"
 msgstr "_Suprimir"
@@ -10998,9 +10787,8 @@
 msgid "Please select your mood from the list"
 msgstr ""
 
-#, fuzzy
 msgid "Message (optional)"
-msgstr "Messatge"
+msgstr ""
 
 msgid "Edit User Mood"
 msgstr ""
@@ -11009,7 +10797,7 @@
 #. gtk_blist_key_press_cb to "Get User Info" on the selected buddy.
 #. Buddies menu
 msgid "/_Buddies"
-msgstr ""
+msgstr "/_Contactes"
 
 msgid "/Buddies/New Instant _Message..."
 msgstr ""
@@ -11058,15 +10846,14 @@
 
 #. Accounts menu
 msgid "/_Accounts"
-msgstr "/_Comptse"
-
-#, fuzzy
+msgstr "/_Comptes"
+
 msgid "/Accounts/Manage Accounts"
-msgstr "/Comptes/Gerir"
+msgstr "/Comptes/Gerir los comptes"
 
 #. Tools
 msgid "/_Tools"
-msgstr ""
+msgstr "/_Espleches"
 
 msgid "/Tools/Buddy _Pounces"
 msgstr ""
@@ -11108,20 +10895,17 @@
 msgid "/Help/Online _Help"
 msgstr ""
 
-#, fuzzy
 msgid "/Help/_Build Information"
-msgstr "Entresenhas"
+msgstr ""
 
 msgid "/Help/_Debug Window"
 msgstr ""
 
-#, fuzzy
 msgid "/Help/De_veloper Information"
-msgstr "Entresenhas sul servidor"
-
-#, fuzzy
+msgstr ""
+
 msgid "/Help/_Translator Information"
-msgstr "Entresenhas personalas"
+msgstr ""
 
 msgid "/Help/_About"
 msgstr "/Ajuda/_A prepaus"
@@ -11251,7 +11035,7 @@
 msgstr "<b>Mot de pas :</b>"
 
 msgid "_Login"
-msgstr "Se _connectar"
+msgstr "_Connexion"
 
 msgid "/Accounts"
 msgstr "/Comptes"
@@ -11285,11 +11069,10 @@
 msgstr ""
 
 msgid "Add a buddy.\n"
-msgstr ""
-
-#, fuzzy
+msgstr "Apondre un contacte.\n"
+
 msgid "Buddy's _username:"
-msgstr "_Nom d'utilizaire :"
+msgstr ""
 
 msgid "(Optional) A_lias:"
 msgstr ""
@@ -11311,7 +11094,7 @@
 msgstr ""
 
 msgid "A_lias:"
-msgstr ""
+msgstr "A_li�s :"
 
 msgid "_Group:"
 msgstr "_Grop :"
@@ -11337,9 +11120,8 @@
 msgid "_Edit Account"
 msgstr ""
 
-#, fuzzy
 msgid "Set _Mood..."
-msgstr "Modificar lo mot de pas"
+msgstr ""
 
 msgid "No actions available"
 msgstr ""
@@ -11348,7 +11130,7 @@
 msgstr "_Desactivar"
 
 msgid "/Tools"
-msgstr ""
+msgstr "/Espleches"
 
 msgid "/Buddies/Sort Buddies"
 msgstr ""
@@ -11395,9 +11177,8 @@
 msgid "Get Away Message"
 msgstr ""
 
-#, fuzzy
 msgid "Last Said"
-msgstr "Nom"
+msgstr ""
 
 msgid "Unable to save icon file to disk."
 msgstr ""
@@ -11425,7 +11206,7 @@
 
 #. Conversation menu
 msgid "/_Conversation"
-msgstr ""
+msgstr "/_Charradissa"
 
 msgid "/Conversation/New Instant _Message..."
 msgstr ""
@@ -11460,9 +11241,8 @@
 msgid "/Conversation/Se_nd File..."
 msgstr ""
 
-#, fuzzy
 msgid "/Conversation/Get _Attention"
-msgstr "Connectat"
+msgstr ""
 
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr ""
@@ -11502,7 +11282,7 @@
 
 #. Options
 msgid "/_Options"
-msgstr ""
+msgstr "/_Opcions"
 
 msgid "/Options/Enable _Logging"
 msgstr ""
@@ -11520,7 +11300,7 @@
 msgstr ""
 
 msgid "/Options"
-msgstr ""
+msgstr "/Opcions"
 
 #. The menubar has been deactivated. Make sure the 'More' submenu is regenerated next time
 #. * the 'Conversation' menu pops up.
@@ -11528,7 +11308,7 @@
 #. * the 'Conversation' menu pops up because the entries can change after the
 #. * conversation is created.
 msgid "/Conversation"
-msgstr ""
+msgstr "/Charradissa"
 
 msgid "/Conversation/View Log"
 msgstr ""
@@ -11545,9 +11325,8 @@
 msgid "/Conversation/Send File..."
 msgstr ""
 
-#, fuzzy
 msgid "/Conversation/Get Attention"
-msgstr "Connectat"
+msgstr ""
 
 msgid "/Conversation/Add Buddy Pounce..."
 msgstr ""
@@ -11605,19 +11384,17 @@
 msgstr ""
 
 msgid "_Send"
-msgstr "_Enviar"
+msgstr "_Mandar"
 
 #. Setup the label telling how many people are in the room.
 msgid "0 people in room"
 msgstr "0 persona dins la sala"
 
-#, fuzzy
 msgid "Close Find bar"
-msgstr "Tampar l'onglet"
-
-#, fuzzy
+msgstr ""
+
 msgid "Find:"
-msgstr "Recercar"
+msgstr "Recercar :"
 
 #, c-format
 msgid "%d person in room"
@@ -11650,7 +11427,7 @@
 msgstr ""
 
 msgid "Close all tabs"
-msgstr ""
+msgstr "Tampar totes los onglets"
 
 msgid "Detach this tab"
 msgstr ""
@@ -11659,7 +11436,7 @@
 msgstr "Tampar l'onglet"
 
 msgid "Close conversation"
-msgstr ""
+msgstr "Tampar la charradissa"
 
 msgid "Last created window"
 msgstr ""
@@ -11671,10 +11448,10 @@
 msgstr ""
 
 msgid "By group"
-msgstr ""
+msgstr "Per grop"
 
 msgid "By account"
-msgstr ""
+msgstr "Per compte"
 
 msgid "Find"
 msgstr "Recercar"
@@ -11707,13 +11484,13 @@
 msgstr ""
 
 msgid "Level "
-msgstr ""
+msgstr "Niv竪l "
 
 msgid "Select the debug filter level."
 msgstr ""
 
 msgid "All"
-msgstr "Totes"
+msgstr "Tot"
 
 msgid "Misc"
 msgstr ""
@@ -11722,17 +11499,13 @@
 msgstr "Al竪rta"
 
 msgid "Error "
-msgstr ""
+msgstr "Error "
 
 msgid "Fatal Error"
 msgstr ""
 
-msgid "bug master"
-msgstr ""
-
-#, fuzzy
 msgid "artist"
-msgstr "Artista"
+msgstr "artista"
 
 #. feel free to not translate this
 msgid "Ka-Hing Cheung"
@@ -11764,7 +11537,7 @@
 msgstr ""
 
 msgid "XMPP"
-msgstr ""
+msgstr "XMPP"
 
 msgid "original author"
 msgstr ""
@@ -11781,9 +11554,8 @@
 msgid "Arabic"
 msgstr "Arab"
 
-#, fuzzy
 msgid "Assamese"
-msgstr "J嘆cs"
+msgstr ""
 
 msgid "Belarusian Latin"
 msgstr "Bielorus latin"
@@ -11794,9 +11566,8 @@
 msgid "Bengali"
 msgstr "Bengal鱈"
 
-#, fuzzy
 msgid "Bengali-India"
-msgstr "Bengal鱈"
+msgstr "Bengal鱈 indian"
 
 msgid "Bosnian"
 msgstr "Bosniac"
@@ -11852,9 +11623,8 @@
 msgid "French"
 msgstr "Franc辿s"
 
-#, fuzzy
 msgid "Irish"
-msgstr "Curd"
+msgstr "Irland辿s"
 
 msgid "Galician"
 msgstr "Galician"
@@ -11874,9 +11644,8 @@
 msgid "Hungarian"
 msgstr "Ongr辿s"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "Romanian"
+msgstr ""
 
 msgid "Indonesian"
 msgstr "Indonesian"
@@ -11893,9 +11662,8 @@
 msgid "Ubuntu Georgian Translators"
 msgstr ""
 
-#, fuzzy
 msgid "Khmer"
-msgstr "Autre"
+msgstr ""
 
 msgid "Kannada"
 msgstr "Kannad�"
@@ -11915,24 +11683,23 @@
 msgid "Maithili"
 msgstr ""
 
+msgid "Meadow Mari"
+msgstr ""
+
 msgid "Macedonian"
 msgstr "Macedonian"
 
-#, fuzzy
 msgid "Malayalam"
-msgstr "�me"
-
-#, fuzzy
+msgstr ""
+
 msgid "Mongolian"
-msgstr "Macedonian"
-
-#, fuzzy
+msgstr ""
+
 msgid "Marathi"
-msgstr "Gujarati"
-
-#, fuzzy
+msgstr ""
+
 msgid "Malay"
-msgstr "�me"
+msgstr ""
 
 msgid "Bokm奪l Norwegian"
 msgstr ""
@@ -11947,11 +11714,10 @@
 msgstr "N嘆rvegian (Nynorsk)"
 
 msgid "Occitan"
-msgstr ""
-
-#, fuzzy
+msgstr "Occitan"
+
 msgid "Oriya"
-msgstr "Opcions"
+msgstr ""
 
 msgid "Punjabi"
 msgstr "Punjabi"
@@ -12007,7 +11773,6 @@
 msgid "Turkish"
 msgstr "Turc"
 
-#, fuzzy
 msgid "Ukranian"
 msgstr "Ukrainien"
 
@@ -12068,14 +11833,13 @@
 msgid "About %s"
 msgstr "A prepaus de %s"
 
-#, fuzzy
 msgid "Build Information"
-msgstr "Entresenhas"
+msgstr ""
 
 #. End of not to be translated section
-#, fuzzy, c-format
+#, c-format
 msgid "%s Build Information"
-msgstr "Entresenhas sus l'utilizaire"
+msgstr ""
 
 msgid "Current Developers"
 msgstr ""
@@ -12089,9 +11853,9 @@
 msgid "Retired Crazy Patch Writers"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s Developer Information"
-msgstr "Entresenhas sul servidor"
+msgstr ""
 
 msgid "Current Translators"
 msgstr ""
@@ -12099,9 +11863,9 @@
 msgid "Past Translators"
 msgstr ""
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s Translator Information"
-msgstr "Entresenhas"
+msgstr ""
 
 msgid "_Name"
 msgstr "_Nom"
@@ -12205,44 +11969,35 @@
 msgid "Right-click for more unread messages...\n"
 msgstr ""
 
-#, fuzzy
 msgid "_Change Status"
-msgstr "Modificar lo mot de pas"
-
-#, fuzzy
+msgstr ""
+
 msgid "Show Buddy _List"
-msgstr "Ti竪ra de contactes"
-
-#, fuzzy
+msgstr ""
+
 msgid "_Unread Messages"
-msgstr "Messatges pas legits"
-
-#, fuzzy
+msgstr "Messatges _pas legits"
+
 msgid "New _Message..."
-msgstr "Enviar un messatge"
-
-#, fuzzy
+msgstr "_Messatge nov竪l..."
+
 msgid "_Accounts"
-msgstr "/_Comptse"
-
-#, fuzzy
+msgstr "/_Comptes"
+
 msgid "Plu_gins"
-msgstr "Ajustons"
-
-#, fuzzy
+msgstr "A_justons"
+
 msgid "Pr_eferences"
-msgstr "Prefer辿ncias"
-
-#, fuzzy
+msgstr "Pr_efer辿ncias"
+
 msgid "Mute _Sounds"
-msgstr "Sons"
+msgstr ""
 
 msgid "_Blink on New Message"
 msgstr ""
 
-#, fuzzy
 msgid "_Quit"
-msgstr "Quitar"
+msgstr "_Quitar"
 
 msgid "Not started"
 msgstr ""
@@ -12403,7 +12158,7 @@
 msgstr ""
 
 msgid "Select Font"
-msgstr "Seleccionar una poli巽a"
+msgstr ""
 
 msgid "Select Text Color"
 msgstr ""
@@ -12412,7 +12167,7 @@
 msgstr ""
 
 msgid "_URL"
-msgstr ""
+msgstr "_URL"
 
 msgid "_Description"
 msgstr "_Descripcion"
@@ -12495,15 +12250,14 @@
 msgid "Insert Smiley"
 msgstr ""
 
-#, fuzzy
 msgid "Send Attention"
-msgstr "Attention�!"
+msgstr ""
 
 msgid "<b>_Bold</b>"
 msgstr ""
 
 msgid "<i>_Italic</i>"
-msgstr ""
+msgstr "<i>_Italic</i>"
 
 msgid "<u>_Underline</u>"
 msgstr ""
@@ -12536,7 +12290,7 @@
 msgstr "_Imatge"
 
 msgid "_Link"
-msgstr ""
+msgstr "_Ligam"
 
 msgid "_Horizontal rule"
 msgstr ""
@@ -12544,9 +12298,8 @@
 msgid "_Smile!"
 msgstr ""
 
-#, fuzzy
 msgid "_Attention!"
-msgstr "Attention�!"
+msgstr "_Atencion�!"
 
 msgid "Log Deletion Failed"
 msgstr ""
@@ -12622,7 +12375,7 @@
 msgstr ""
 
 msgid "NAME"
-msgstr ""
+msgstr "NOM"
 
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
@@ -12703,12 +12456,11 @@
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr ""
 
-#, fuzzy
 msgid "No message"
-msgstr "Messatge"
+msgstr ""
 
 msgid "Open All Messages"
-msgstr ""
+msgstr "Dobrir totes los messatges"
 
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr ""
@@ -12754,9 +12506,8 @@
 msgid "<b>Web site:</b>"
 msgstr ""
 
-#, fuzzy
 msgid "<b>Filename:</b>"
-msgstr "Nom de fichi竪r :"
+msgstr "<b>Nom de fichi竪r :</b>"
 
 msgid "Configure Pl_ugin"
 msgstr ""
@@ -12765,11 +12516,10 @@
 msgstr ""
 
 msgid "Select a file"
-msgstr "Seleccionar un fichi竪r"
-
-#, fuzzy
+msgstr ""
+
 msgid "Modify Buddy Pounce"
-msgstr "Entresenhas"
+msgstr ""
 
 #. Create the "Pounce on Whom" frame.
 msgid "Pounce on Whom"
@@ -12818,7 +12568,7 @@
 msgstr ""
 
 msgid "Send a _message"
-msgstr ""
+msgstr "Mandar un _messatge"
 
 msgid "E_xecute a command"
 msgstr ""
@@ -12844,13 +12594,11 @@
 msgid "Pounce Target"
 msgstr ""
 
-#, fuzzy
 msgid "Started typing"
-msgstr "Comen巽a a picar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Paused while typing"
-msgstr "L'utilizaire es a picar..."
+msgstr ""
 
 msgid "Signed on"
 msgstr ""
@@ -12861,23 +12609,20 @@
 msgid "Returned from being away"
 msgstr ""
 
-#, fuzzy
 msgid "Stopped typing"
 msgstr "S'arr竪sta de picar"
 
 msgid "Signed off"
 msgstr ""
 
-#, fuzzy
 msgid "Became idle"
-msgstr "Enregistrar lo fichi竪r"
+msgstr ""
 
 msgid "Went away"
 msgstr ""
 
-#, fuzzy
 msgid "Sent a message"
-msgstr "Messatges enviats"
+msgstr ""
 
 msgid "Unknown.... Please report this!"
 msgstr ""
@@ -12891,9 +12636,8 @@
 msgid "The default Pidgin sound theme"
 msgstr ""
 
-#, fuzzy
 msgid "The default Pidgin buddy list theme"
-msgstr "Ti竪ra de contactes"
+msgstr ""
 
 msgid "The default Pidgin status icon theme"
 msgstr ""
@@ -12907,9 +12651,8 @@
 msgid "Theme failed to copy."
 msgstr ""
 
-#, fuzzy
 msgid "Theme Selections"
-msgstr "Seleccionar una poli巽a"
+msgstr ""
 
 #. Instructions
 msgid ""
@@ -12918,20 +12661,17 @@
 "list."
 msgstr ""
 
-#, fuzzy
 msgid "Buddy List Theme:"
-msgstr "Ti竪ra de contactes"
-
-#, fuzzy
+msgstr ""
+
 msgid "Status Icon Theme:"
-msgstr "Estatut"
+msgstr ""
 
 msgid "Sound Theme:"
 msgstr ""
 
-#, fuzzy
 msgid "Smiley Theme:"
-msgstr "Enregistrar l'imatge"
+msgstr ""
 
 msgid "Keyboard Shortcuts"
 msgstr ""
@@ -12949,9 +12689,8 @@
 msgid "On unread messages"
 msgstr ""
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "Connectat"
+msgstr ""
 
 msgid "_Hide new IM conversations:"
 msgstr ""
@@ -12976,10 +12715,10 @@
 msgstr ""
 
 msgid "Top"
-msgstr "Superior"
+msgstr "Naut"
 
 msgid "Bottom"
-msgstr "Inferior"
+msgstr "Bais"
 
 msgid "Left"
 msgstr "Esqu竪rra"
@@ -13046,17 +12785,15 @@
 msgid "Cannot start browser configuration program."
 msgstr ""
 
-#, fuzzy
 msgid "Disabled"
-msgstr "_Desactivar"
+msgstr "Desactivat"
 
 #, c-format
 msgid "Use _automatically detected IP address: %s"
 msgstr ""
 
-#, fuzzy
 msgid "ST_UN server:"
-msgstr "_Servidor :"
+msgstr "Servidor ST_UN :"
 
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr ""
@@ -13073,42 +12810,36 @@
 msgid "_Manually specify range of ports to listen on:"
 msgstr ""
 
-#, fuzzy
 msgid "_Start:"
-msgstr "Estat :"
-
-#, fuzzy
+msgstr ""
+
 msgid "_End:"
-msgstr "_Enviar"
+msgstr "_Fin :"
 
 #. TURN server
 msgid "Relay Server (TURN)"
 msgstr ""
 
-#, fuzzy
 msgid "_TURN server:"
-msgstr "_Servidor :"
-
-#, fuzzy
+msgstr "Servidor _TURN :"
+
 msgid "_UDP Port:"
-msgstr "_P嘆rt :"
-
-#, fuzzy
+msgstr "P嘆rt _UDP :"
+
 msgid "Use_rname:"
-msgstr "_Nom d'utilizaire :"
-
-#, fuzzy
+msgstr "Nom d'utilizai_re :"
+
 msgid "Pass_word:"
-msgstr "Mot de pas�:"
+msgstr "Mot de _pas�:"
 
 msgid "Seamonkey"
-msgstr ""
+msgstr "Seamonkey"
 
 msgid "Opera"
-msgstr "Opcions"
+msgstr "Opera"
 
 msgid "Netscape"
-msgstr ""
+msgstr "Netscape"
 
 msgid "Mozilla"
 msgstr "Mozilla"
@@ -13117,7 +12848,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13163,7 +12894,7 @@
 msgstr ""
 
 msgid "_Browser:"
-msgstr ""
+msgstr "_Navigador :"
 
 msgid "_Open link in:"
 msgstr ""
@@ -13206,11 +12937,9 @@
 msgid "No proxy"
 msgstr ""
 
-#, fuzzy
 msgid "P_ort:"
 msgstr "_P嘆rt :"
 
-#, fuzzy
 msgid "User_name:"
 msgstr "_Nom d'utilizaire :"
 
@@ -13274,24 +13003,20 @@
 msgid "Sounds when conversation has _focus"
 msgstr ""
 
-#, fuzzy
 msgid "_Enable sounds:"
-msgstr "Activat"
-
-#, fuzzy
+msgstr "A_ctivar los sons :"
+
 msgid "V_olume:"
-msgstr "Volum :"
+msgstr "V_olum :"
 
 msgid "Play"
 msgstr "Legir"
 
-#, fuzzy
 msgid "_Browse..."
-msgstr "Navegador"
-
-#, fuzzy
+msgstr ""
+
 msgid "_Reset"
-msgstr "Reinicializar"
+msgstr "_Reinicializar"
 
 msgid "_Report idle time:"
 msgstr ""
@@ -13325,14 +13050,13 @@
 msgstr "Interfa巽"
 
 msgid "Browser"
-msgstr "Navegador"
+msgstr "Navigador"
 
 msgid "Status / Idle"
 msgstr ""
 
-#, fuzzy
 msgid "Themes"
-msgstr "T竪st"
+msgstr "T竪mas"
 
 msgid "Allow all users to contact me"
 msgstr ""
@@ -13344,7 +13068,7 @@
 msgstr ""
 
 msgid "Block all users"
-msgstr ""
+msgstr "Blocar totes los utilizaires"
 
 msgid "Block only the users below"
 msgstr ""
@@ -13383,7 +13107,7 @@
 msgstr ""
 
 msgid "Block User"
-msgstr ""
+msgstr "Blocar un utilizaire"
 
 msgid "Type a user to block."
 msgstr ""
@@ -13393,7 +13117,7 @@
 
 #, c-format
 msgid "Block %s?"
-msgstr ""
+msgstr "Blocar %s ?"
 
 #, c-format
 msgid "Are you sure you want to block %s?"
@@ -13473,29 +13197,24 @@
 msgid "Add Smiley"
 msgstr ""
 
-#, fuzzy
 msgid "_Image:"
-msgstr "_Imatge"
+msgstr "_Imatge :"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "Ordenar"
-
-#, fuzzy
+msgstr ""
+
 msgid "Smiley"
-msgstr "Talha"
-
-#, fuzzy
+msgstr ""
+
 msgid "Shortcut Text"
-msgstr "Ordenar"
+msgstr ""
 
 msgid "Custom Smiley Manager"
 msgstr ""
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "Seleccionar una poli巽a"
+msgstr ""
 
 msgid "Click to change your buddyicon for this account."
 msgstr ""
@@ -13516,7 +13235,7 @@
 msgstr ""
 
 msgid "Google Talk"
-msgstr ""
+msgstr "Google Talk"
 
 msgid "Facebook (XMPP)"
 msgstr ""
@@ -13601,9 +13320,8 @@
 msgid "Could not set icon"
 msgstr ""
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_Dobrir lo ligam dins lo navegaire"
+msgstr "D_obrir lo ligam"
 
 msgid "_Copy Link Location"
 msgstr "_Copiar l'empla巽ament del ligam"
@@ -13611,9 +13329,8 @@
 msgid "_Copy Email Address"
 msgstr ""
 
-#, fuzzy
 msgid "_Open File"
-msgstr "_Enviar un fichi竪r"
+msgstr "D_obrir lo fichi竪r"
 
 msgid "Open _Containing Directory"
 msgstr ""
@@ -13621,19 +13338,17 @@
 msgid "Save File"
 msgstr "Enregistrar lo fichi竪r"
 
-#, fuzzy
 msgid "_Play Sound"
-msgstr "Legir un son"
-
-#, fuzzy
+msgstr "_Legir un son"
+
 msgid "_Save File"
-msgstr "Enregistrar lo fichi竪r"
+msgstr "Enregi_strar lo fichi竪r"
 
 msgid "Do you really want to clear?"
 msgstr ""
 
 msgid "Select color"
-msgstr "Seleccionar una color"
+msgstr ""
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -13641,7 +13356,7 @@
 msgstr "Pidgin"
 
 msgid "_Alias"
-msgstr ""
+msgstr "_Ali�s"
 
 msgid "Close _tabs"
 msgstr ""
@@ -13650,22 +13365,19 @@
 msgstr ""
 
 msgid "_Invite"
-msgstr ""
-
-#, fuzzy
+msgstr "Conv_idar"
+
 msgid "_Modify..."
-msgstr "_Modificar"
-
-#, fuzzy
+msgstr "_Modificar..."
+
 msgid "_Add..."
-msgstr "_Apondre"
+msgstr "_Apondre..."
 
 msgid "_Open Mail"
 msgstr ""
 
-#, fuzzy
 msgid "_Edit"
-msgstr "Edicion"
+msgstr "_Edicion"
 
 msgid "Pidgin Tooltip"
 msgstr ""
@@ -13679,9 +13391,8 @@
 msgid "none"
 msgstr "pas cap"
 
-#, fuzzy
 msgid "Small"
-msgstr "Corri竪l"
+msgstr "Pichons"
 
 msgid "Smaller versions of the default smileys"
 msgstr ""
@@ -13793,7 +13504,7 @@
 msgstr ""
 
 msgid "Sent Messages"
-msgstr "Messatges enviats"
+msgstr "Messatges mandats"
 
 msgid "Received Messages"
 msgstr ""
@@ -13813,13 +13524,11 @@
 
 #. Note to translators: The string "Enter an XMPP Server" is asking the
 #. user to type the name of an XMPP server which will then be queried
-#, fuzzy
 msgid "Server name request"
 msgstr "Nom d'utilisateur envoy辿"
 
-#, fuzzy
 msgid "Enter an XMPP Server"
-msgstr "Picatz lo mot de pas"
+msgstr ""
 
 msgid "Select an XMPP server to query"
 msgstr ""
@@ -13827,16 +13536,14 @@
 msgid "Find Services"
 msgstr ""
 
-#, fuzzy
 msgid "Add to Buddy List"
-msgstr "Ti竪ra de contactes"
+msgstr "Apondre a la ti竪ra de contactes"
 
 msgid "Gateway"
 msgstr ""
 
-#, fuzzy
 msgid "Directory"
-msgstr "Creator"
+msgstr ""
 
 msgid "PubSub Collection"
 msgstr ""
@@ -13844,19 +13551,19 @@
 msgid "PubSub Leaf"
 msgstr ""
 
-#, fuzzy
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "Descripcion"
+msgstr ""
+"\n"
+"<b>Descripcion :</b> "
 
 #. Create the window.
 msgid "Service Discovery"
 msgstr ""
 
-#, fuzzy
 msgid "_Browse"
-msgstr "Navegador"
+msgstr ""
 
 msgid "Server does not exist"
 msgstr ""
@@ -14034,13 +13741,13 @@
 
 #. Optional Information section
 msgid "Optional information:"
-msgstr "Entresenhas opcionalas :"
+msgstr ""
 
 msgid "First name:"
 msgstr "Pichon nom :"
 
 msgid "Last name:"
-msgstr "Nom :"
+msgstr "Nom d'ostal :"
 
 msgid "Email:"
 msgstr ""
@@ -14281,9 +13988,8 @@
 msgid "Conversation Entry"
 msgstr ""
 
-#, fuzzy
 msgid "Conversation History"
-msgstr "Connectat"
+msgstr ""
 
 msgid "Request Dialog"
 msgstr ""
@@ -14292,7 +13998,7 @@
 msgstr ""
 
 msgid "Select Color"
-msgstr "Seleccionar una color"
+msgstr ""
 
 #, c-format
 msgid "Select Interface Font"
@@ -14314,9 +14020,8 @@
 msgid "GTK+ Theme Control Settings"
 msgstr ""
 
-#, fuzzy
 msgid "Colors"
-msgstr "Tampar"
+msgstr "Colors"
 
 msgid "Fonts"
 msgstr "Poli巽as"
@@ -14358,9 +14063,8 @@
 msgid "New Version Available"
 msgstr ""
 
-#, fuzzy
 msgid "Later"
-msgstr "Data"
+msgstr "Pus tard"
 
 msgid "Download Now"
 msgstr ""
@@ -14399,9 +14103,8 @@
 
 #. *< name
 #. *< version
-#, fuzzy
 msgid "Conversation Window Send Button."
-msgstr "Connectat"
+msgstr ""
 
 #. *< summary
 msgid ""
@@ -14472,34 +14175,29 @@
 msgid "Icon for Chat"
 msgstr ""
 
-#, fuzzy
 msgid "Ignored"
-msgstr "Ignorar"
-
-#, fuzzy
+msgstr "Ignorat"
+
 msgid "Founder"
-msgstr "Expeditor"
+msgstr ""
 
 #. A user in a chat room who has special privileges.
-#, fuzzy
 msgid "Operator"
-msgstr "Opcions"
+msgstr "Operador"
 
 #. A half operator is someone who has a subset of the privileges
 #. that an operator has.
 msgid "Half Operator"
 msgstr ""
 
-#, fuzzy
 msgid "Authorization dialog"
-msgstr "Autorizar"
+msgstr ""
 
 msgid "Error dialog"
 msgstr ""
 
-#, fuzzy
 msgid "Information dialog"
-msgstr "Entresenhas"
+msgstr ""
 
 msgid "Mail dialog"
 msgstr ""
@@ -14507,38 +14205,32 @@
 msgid "Question dialog"
 msgstr ""
 
-#, fuzzy
 msgid "Warning dialog"
-msgstr "Al竪rta"
+msgstr ""
 
 msgid "What kind of dialog is this?"
 msgstr ""
 
-#, fuzzy
 msgid "Status Icons"
-msgstr "Estatut"
+msgstr ""
 
 msgid "Chatroom Emblems"
 msgstr ""
 
-#, fuzzy
 msgid "Dialog Icons"
-msgstr "Modificar lo mot de pas"
+msgstr ""
 
 msgid "Pidgin Icon Theme Editor"
 msgstr ""
 
-#, fuzzy
 msgid "Contact"
-msgstr "Se connectar"
-
-#, fuzzy
+msgstr "Contacte"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "Ti竪ra de contactes"
-
-#, fuzzy
+msgstr ""
+
 msgid "Edit Buddylist Theme"
-msgstr "Ti竪ra de contactes"
+msgstr ""
 
 msgid "Edit Icon Theme"
 msgstr ""
@@ -14608,10 +14300,10 @@
 msgstr ""
 
 msgid "12 hour time format"
-msgstr ""
+msgstr "Format 12 oras"
 
 msgid "24 hour time format"
-msgstr ""
+msgstr "Format 24 oras"
 
 msgid "Show dates in..."
 msgstr ""
@@ -14649,35 +14341,29 @@
 "timestamp formats."
 msgstr ""
 
-#, fuzzy
 msgid "Audio"
-msgstr "Autor"
-
-#, fuzzy
+msgstr ""
+
 msgid "Video"
-msgstr "Votz"
+msgstr "Vid竪o"
 
 msgid "Output"
 msgstr ""
 
-#, fuzzy
 msgid "_Plugin"
-msgstr "Ajustons"
-
-#, fuzzy
+msgstr "A_juston"
+
 msgid "_Device"
-msgstr "Periferic"
+msgstr "_Periferic"
 
 msgid "Input"
 msgstr ""
 
-#, fuzzy
 msgid "P_lugin"
-msgstr "Ajustons"
-
-#, fuzzy
+msgstr "A_juston"
+
 msgid "D_evice"
-msgstr "Periferic"
+msgstr "P_eriferic"
 
 #. *< magic
 #. *< major version
@@ -14800,7 +14486,7 @@
 msgstr ""
 
 msgid "Account: "
-msgstr ""
+msgstr "Compte : "
 
 msgid "<font color='#777777'>Not connected to XMPP</font>"
 msgstr ""
@@ -14876,13 +14562,12 @@
 msgstr ""
 
 #. Installer Subsection Text
-#, fuzzy
 msgid "Localizations"
-msgstr "Empla巽ament"
+msgstr "Traduccions"
 
 #. "Next >" appears on a button on the License Page of the Installer
 msgid "Next >"
-msgstr ""
+msgstr "Seguent >"
 
 #. Installer Subsection Text
 msgid "Pidgin Instant Messaging Client (required)"
@@ -14895,9 +14580,8 @@
 msgstr ""
 
 #. Installer Subsection Text
-#, fuzzy
 msgid "Shortcuts"
-msgstr "Ordenar"
+msgstr "Acorchis"
 
 #. Installer Subsection Detailed Description
 msgid "Shortcuts for starting Pidgin"
@@ -14908,9 +14592,8 @@
 msgstr ""
 
 #. Installer Subsection Text
-#, fuzzy
 msgid "Start Menu"
-msgstr "Data de debuta"
+msgstr ""
 
 #. Installer Subsection Detailed Description
 msgid ""
--- a/po/pl.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/pl.po	Sun Mar 13 18:14:04 2011 +0000
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin Polish translation\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-14 13:40+0100\n"
+"POT-Creation-Date: 2011-03-10 02:18-0800\n"
+"PO-Revision-Date: 2011-03-06 20:43+0100\n"
 "Last-Translator: Piotr Dr�g <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <pl@li.org>\n"
 "Language: pl\n"
@@ -2372,8 +2372,12 @@
 "�cie甜ka do zapisywania plik坦w w\n"
 "(prosz� poda� pe�n� �cie甜k�)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Automatyczne odrzucanie od u甜ytkownik坦w spoza listy znajomych"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Kiedy 甜�danie przes�ania pliku zostaje odebrane od\n"
+"u甜ytkownika, kt坦ry *nie* jest na li�cie znajomych:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2385,6 +2389,9 @@
 msgid "Create a new directory for each user"
 msgstr "Utworzenie nowego katalogu dla ka甜dego u甜ytkownika"
 
+msgid "Escape the filenames"
+msgstr "Sekwencja steruj�ca przed nazwami plik坦w"
+
 msgid "Notes"
 msgstr "Notatki"
 
@@ -3234,9 +3241,7 @@
 msgstr "Identyfikator u甜ytkownika"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Imi�"
 
@@ -3852,7 +3857,10 @@
 "Serwer wymaga uwierzytelnienia w zwyk�ym tek�cie za po�rednictwem "
 "niezaszyfrowanego strumienia"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Nieprawid�owa odpowied添 z serwera"
 
@@ -3996,7 +4004,6 @@
 msgid "Postal Code"
 msgstr "Kod pocztowy"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Kraj"
 
@@ -6108,6 +6115,9 @@
 msgid "Connecting..."
 msgstr "��czenie..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Podana wy�wietlana nazwa jest za kr坦tka."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Podany kod PIN ma nieprawid�ow� d�ugo�� [7-10]."
 
@@ -6181,33 +6191,6 @@
 msgid "Retrieving User Information..."
 msgstr "Pobieranie informacji o u甜ytkowniku..."
 
-msgid "Loading menu..."
-msgstr "Wczytywanie menu..."
-
-msgid "Status Message"
-msgstr "Wiadomo�� stanu"
-
-msgid "Rejection Message"
-msgstr "Wiadomo�� odrzucenia"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Ukryty numer"
-
-msgid "Your MXit ID..."
-msgstr "Identyfikator MXit u甜ytkownika..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "Serwer WAP"
-
-msgid "Connect via HTTP"
-msgstr "Po��czenie przez HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "W��czenie wyskakuj�cego ekranu powitalnego"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "U甜ytkownik zosta� wyrzucony z tego MultiMX."
@@ -6222,6 +6205,43 @@
 msgid "You have invited"
 msgstr "Zaproszono"
 
+msgid "Loading menu..."
+msgstr "Wczytywanie menu..."
+
+msgid "Status Message"
+msgstr "Wiadomo�� stanu"
+
+msgid "Rejection Message"
+msgstr "Wiadomo�� odrzucenia"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Ukryty numer"
+
+msgid "No profile available"
+msgstr "Brak dost�pnego profilu"
+
+msgid "This contact does not have a profile."
+msgstr "Ten kontakt nie posiada profilu."
+
+msgid "Your MXit ID..."
+msgstr "Identyfikator MXit u甜ytkownika..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Zapro� ponownie"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "Serwer WAP"
+
+msgid "Connect via HTTP"
+msgstr "Po��czenie przez HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "W��czenie wyskakuj�cego ekranu powitalnego"
+
 msgid "Last Online"
 msgstr "Ostatnio online"
 
@@ -7518,6 +7538,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Roz��czono z pokoju konferencji %s."
 
+msgid "The new formatting is invalid."
+msgstr "Nowe formatowanie jest nieprawid�owe."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Formatowanie nazwy u甜ytkownika mo甜e zmieni� wy��cznie wielko�� liter i "
+"spacje."
+
 msgid "Pop-Up Message"
 msgstr "Wiadomo�� wyskakuj�ca"
 
@@ -7794,14 +7822,6 @@
 msgid "ICQ Privacy Options"
 msgstr "Opcje prywatno�ci ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "Nowe formatowanie jest nieprawid�owe."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Formatowanie nazwy u甜ytkownika mo甜e zmieni� wy��cznie wielko�� liter i "
-"spacje."
-
 msgid "Change Address To:"
 msgstr "Zmiana adresu na:"
 
@@ -7815,7 +7835,7 @@
 "You can re-request authorization from these buddies by right-clicking on "
 "them and selecting \"Re-request Authorization.\""
 msgstr ""
-"Mo甜na ponownie poprosi� o upowa甜nienia od tych znajomych, naciskaj� ma nich "
+"Mo甜na ponownie poprosi� o upowa甜nienia od tych znajomych, naciskaj� na nich "
 "prawym przyciskiem myszy i wybieraj�c \"Ponownie popro� o upowa甜nienie\"."
 
 msgid "Find Buddy by Email"
@@ -7910,75 +7930,6 @@
 "niezb�dne dla obraz坦w komunikatora. Poniewa甜 adres IP zostanie ujawniony, "
 "mo甜e si� to wi�za� z zagro甜eniem prywatno�ci."
 
-msgid "Invalid SNAC"
-msgstr "Nieprawid�owe SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "Przekroczono ograniczenie pr�dko�ci serwera"
-
-msgid "Client rate limit exceeded"
-msgstr "Przekroczono ograniczenie pr�dko�ci klienta"
-
-msgid "Service unavailable"
-msgstr "Us�uga jest niedost�pna"
-
-msgid "Service not defined"
-msgstr "Nie okre�lono us�ugi"
-
-msgid "Obsolete SNAC"
-msgstr "Przestarza�e SNAC"
-
-msgid "Not supported by host"
-msgstr "Nieobs�ugiwane przez serwer"
-
-msgid "Not supported by client"
-msgstr "Nieobs�ugiwane przez klienta"
-
-msgid "Refused by client"
-msgstr "Odmowa klienta"
-
-msgid "Reply too big"
-msgstr "Odpowied添 jest za du甜a"
-
-msgid "Responses lost"
-msgstr "Utracono odpowiedzi"
-
-msgid "Request denied"
-msgstr "Odrzucono pro�by"
-
-msgid "Busted SNAC payload"
-msgstr "Uszkodzone dane SNAC"
-
-msgid "Insufficient rights"
-msgstr "Niewystarczaj�ce uprawnienia"
-
-msgid "In local permit/deny"
-msgstr "W lokalnym pozwoleniu/odmowie"
-
-msgid "Warning level too high (sender)"
-msgstr "Poziom ostrze甜enia jest za wysoki (nadawca)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Poziom ostrze甜enia jest za wysoki (odbiorca)"
-
-msgid "User temporarily unavailable"
-msgstr "U甜ytkownik jest tymczasowo niedost�pny"
-
-msgid "No match"
-msgstr "Brak wynik坦w"
-
-msgid "List overflow"
-msgstr "Lista jest pe�na"
-
-msgid "Request ambiguous"
-msgstr "Niejednoznaczna pro�ba"
-
-msgid "Queue full"
-msgstr "Kolejka jest pe�na"
-
-msgid "Not while on AOL"
-msgstr "Nie podczas u甜ywania AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Ikona znajomego"
@@ -8097,6 +8048,75 @@
 msgid "Capabilities"
 msgstr "Mo甜liwo�ci"
 
+msgid "Invalid SNAC"
+msgstr "Nieprawid�owe SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Przekroczono ograniczenie pr�dko�ci serwera"
+
+msgid "Client rate limit exceeded"
+msgstr "Przekroczono ograniczenie pr�dko�ci klienta"
+
+msgid "Service unavailable"
+msgstr "Us�uga jest niedost�pna"
+
+msgid "Service not defined"
+msgstr "Nie okre�lono us�ugi"
+
+msgid "Obsolete SNAC"
+msgstr "Przestarza�e SNAC"
+
+msgid "Not supported by host"
+msgstr "Nieobs�ugiwane przez serwer"
+
+msgid "Not supported by client"
+msgstr "Nieobs�ugiwane przez klienta"
+
+msgid "Refused by client"
+msgstr "Odmowa klienta"
+
+msgid "Reply too big"
+msgstr "Odpowied添 jest za du甜a"
+
+msgid "Responses lost"
+msgstr "Utracono odpowiedzi"
+
+msgid "Request denied"
+msgstr "Odrzucono pro�by"
+
+msgid "Busted SNAC payload"
+msgstr "Uszkodzone dane SNAC"
+
+msgid "Insufficient rights"
+msgstr "Niewystarczaj�ce uprawnienia"
+
+msgid "In local permit/deny"
+msgstr "W lokalnym pozwoleniu/odmowie"
+
+msgid "Warning level too high (sender)"
+msgstr "Poziom ostrze甜enia jest za wysoki (nadawca)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Poziom ostrze甜enia jest za wysoki (odbiorca)"
+
+msgid "User temporarily unavailable"
+msgstr "U甜ytkownik jest tymczasowo niedost�pny"
+
+msgid "No match"
+msgstr "Brak wynik坦w"
+
+msgid "List overflow"
+msgstr "Lista jest pe�na"
+
+msgid "Request ambiguous"
+msgstr "Niejednoznaczna pro�ba"
+
+msgid "Queue full"
+msgstr "Kolejka jest pe�na"
+
+msgid "Not while on AOL"
+msgstr "Nie podczas u甜ywania AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8692,14 +8712,14 @@
 msgid "Select Server"
 msgstr "Wyb坦r serwera"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Po��czenie przez TCP"
@@ -8713,6 +8733,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Wy�wietlanie pokoju konferencji po nadej�ciu wiadomo�ci"
 
+msgid "Use default font"
+msgstr "U甜ycie domy�lnej czcionki"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Czas mi�dzy wznowieniami (sekundy)"
 
@@ -12252,9 +12275,6 @@
 msgid "Fatal Error"
 msgstr "B��d krytyczny"
 
-msgid "bug master"
-msgstr "w�adca b��d坦w"
-
 msgid "artist"
 msgstr "artysta"
 
@@ -12434,6 +12454,9 @@
 msgid "Maithili"
 msgstr "maithili"
 
+msgid "Meadow Mari"
+msgstr "maryjski"
+
 msgid "Macedonian"
 msgstr "macedo�ski"
 
@@ -13287,6 +13310,13 @@
 msgid "New Pounces"
 msgstr "Nowe przechwytywanie zdarze�"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
 msgstr "Odrzu�"
 
--- a/po/ro.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/ro.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,16 +1,17 @@
 # Pidgin Romanian translation
 # This file is distributed under the same license as the Pidgin package.
-# 2002-2010, Mi�u Moldovan <dumol@gnome.org>
+# 2002-2011, Mi�u Moldovan <dumol@gnome.org>
 # 2009, Andrei Popescu <andreimpopescu@gmail.com>
 # Contributions: 2007, Alexandru Szasz <alexxed@gmail.com>
-msgid ""
-msgstr ""
-"Project-Id-Version: pidgin-2.7.8\n"
+# Mi�u Moldovan <dumol@gnome.org>, 2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: pidgin-2.7.11\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-17 18:47+0200\n"
-"Last-Translator: Mi�u Moldovan <dumol@l10n.ro>\n"
-"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
+"POT-Creation-Date: 2011-03-10 02:33-0800\n"
+"PO-Revision-Date: 2011-03-10 12:23+0300\n"
+"Last-Translator: Mi�u Moldovan <dumol@gnome.org>\n"
+"Language-Team: Romanian <gnomero-list@lists.sourceforge.net>\n"
 "Language: ro\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -96,7 +97,7 @@
 msgstr "(Probabil a�i uitat s� face�i ��make install��.)"
 
 msgid "Modify Account"
-msgstr "Modificare cont"
+msgstr "Editare cont"
 
 msgid "New Account"
 msgstr "Cont nou"
@@ -105,7 +106,7 @@
 msgstr "Protocol:"
 
 msgid "Username:"
-msgstr "Nume utilizator:"
+msgstr "Nume de utilizator:"
 
 msgid "Password:"
 msgstr "Parol�:"
@@ -212,7 +213,7 @@
 msgstr "Eroare la ad�ugarea contactului"
 
 msgid "Username"
-msgstr "Nume utilizator"
+msgstr "Nume de utilizator"
 
 msgid "Alias (optional)"
 msgstr "Alias (op�ional)"
@@ -285,7 +286,7 @@
 msgstr "Detalii"
 
 msgid "Add Buddy Pounce"
-msgstr "Ad�ugare 樽nt但mpinare"
+msgstr "Ad�uga�i o 樽nt但mpinare"
 
 msgid "Send File"
 msgstr "Trimitere fi�ier"
@@ -576,10 +577,10 @@
 msgstr "Comanda dat� a e�uat din motive necunoscute."
 
 msgid "That command only works in chats, not IMs."
-msgstr "Aceast� comand� func�ioneaz� doar 樽n chat-uri, nu �i 樽n discu�ii."
+msgstr "Aceast� comand� func�ioneaz� doar 樽ntr-un chat, nu �i 樽ntr-o discu�ie."
 
 msgid "That command only works in IMs, not chats."
-msgstr "Aceast� comand� func�ioneaz� doar 樽n discu�ii, nu �i 樽n chat-uri."
+msgstr "Aceast� comand� func�ioneaz� doar 樽ntr-o discu�ie, nu �i 樽ntr-un chat."
 
 msgid "That command doesn't work on this protocol."
 msgstr "Aceast� comand� nu func�ioneaz� 樽n acest protocol."
@@ -637,7 +638,7 @@
 msgstr "Arat� marcaje de timp"
 
 msgid "Add Buddy Pounce..."
-msgstr "Ad�ugare 樽nt但mpinare..."
+msgstr "Ad�uga�i o 樽nt但mpinare..."
 
 msgid "Invite..."
 msgstr "Invit�..."
@@ -1112,7 +1113,7 @@
 msgstr "�nt但mpinare doar 樽n starea de indisponibilitate"
 
 msgid "Recurring"
-msgstr "Recurent�"
+msgstr "Recuren��"
 
 msgid "Cannot create pounce"
 msgstr "Nu se poate crea 樽nt但mpinarea"
@@ -1128,7 +1129,7 @@
 msgstr "Sigur dori�i s� �terge�i 樽nt但mpinarea la %s pentru %s?"
 
 msgid "Buddy Pounces"
-msgstr "�nt但mpin�ri contacte"
+msgstr "�nt但mpin�ri pentru contacte"
 
 #, c-format
 msgid "%s has started typing to you (%s)"
@@ -1240,14 +1241,14 @@
 msgstr "Alege�i un loc..."
 
 msgid "Hit 'Enter' to find more rooms of this category."
-msgstr "Ap�sa�i ENTER pentru a mai c�uta camere 樽n aceast� categorie."
+msgstr "Ap�sa�i ENTER pentru a mai c�uta canale 樽n aceast� categorie."
 
 msgid "Get"
 msgstr "Ob�inere"
 
 #. Create the window.
 msgid "Room List"
-msgstr "List� camere de chat"
+msgstr "Lista canalelor"
 
 msgid "Buddy logs in"
 msgstr "Un contact se autentific�"
@@ -1551,10 +1552,10 @@
 
 #, c-format
 msgid "TinyURL for above: %s"
-msgstr "TinyURL pentru linkul de mai sus: %s"
+msgstr "TinyURL pentru adresa de mai sus: %s"
 
 msgid "Please wait while TinyURL fetches a shorter URL ..."
-msgstr "A�tepa�i p但n� c但nd TinyURL ofer� un link mai scurt..."
+msgstr "A�tepta�i ca TinyURL s� genereze o adres� mai scurt�..."
 
 msgid "Only create TinyURL for URLs of this length or greater"
 msgstr "Creeaz� TinyURL doar pentru URL-uri de aceast� lungime sau mai mari"
@@ -1851,11 +1852,11 @@
 
 #, c-format
 msgid "%s entered the room."
-msgstr "%s a intrat 樽n chat."
+msgstr "%s a intrat 樽n canal."
 
 #, c-format
 msgid "%s [<I>%s</I>] entered the room."
-msgstr "%s [<I>%s</I>] a intrat 樽n chat."
+msgstr "%s [<I>%s</I>] a intrat 樽n canal."
 
 #, c-format
 msgid "You are now known as %s"
@@ -1867,11 +1868,11 @@
 
 #, c-format
 msgid "%s left the room."
-msgstr "%s a ie�it din chat."
+msgstr "%s a ie�it din canal."
 
 #, c-format
 msgid "%s left the room (%s)."
-msgstr "%s a ie�it din chat (%s)."
+msgstr "%s a ie�it din canal (%s)."
 
 msgid "Invite to chat"
 msgstr "Invita�ie 樽ntr-un chat"
@@ -2322,9 +2323,7 @@
 msgstr "Auto-acceptare"
 
 msgid "Auto-accept file transfer requests from selected users."
-msgstr ""
-"Permite acceptarea automat� a transferurilor de fi�iere ini�iate de anumi�i "
-"utilizatori."
+msgstr "Acceptare automat� pentru anumite transferuri de fi�iere."
 
 #, c-format
 msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed."
@@ -2367,9 +2366,12 @@
 "Cale pentru salvarea fi�ierelor:\n"
 "(Preciza�i calea complet�)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr ""
-"Refuz� automat pentru utilizatorii ce nu fac parte din lista de contacte"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"C但nd se prime�te o cerere de transfer de fi�iere de la un\n"
+"utilizator ce NU e 樽n lista de contacte:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2381,6 +2383,9 @@
 msgid "Create a new directory for each user"
 msgstr "Creeaz� un nou director pentru fiecare utilizator"
 
+msgid "Escape the filenames"
+msgstr "Evit� interpretarea caracterelor speciale 樽n nume"
+
 msgid "Notes"
 msgstr "Noti�e"
 
@@ -2441,7 +2446,7 @@
 #. *  summary
 #. *  description
 msgid "DBus Plugin Example"
-msgstr "Exemplu de modul DBus"
+msgstr "Exemplu de modul DBus."
 
 #. *< type
 #. *< ui_requirement
@@ -2539,7 +2544,7 @@
 
 #. Translators: Followed by an input request a number of people
 msgid "For rooms with more than this many people"
-msgstr "�n camerele cu un num�r mai mare de at但t"
+msgstr "�n canalele cu un num�r mai mare de at但t"
 
 msgid "If user has not spoken in this many minutes"
 msgstr "Dac� utilizatorul nu a zis nimic 樽n acest num�r de minute"
@@ -2567,7 +2572,7 @@
 "This plugin hides join/part messages in large rooms, except for those users "
 "actively taking part in a conversation."
 msgstr ""
-"Acest modul ascunde mesajele de intrare �i ie�ire din camerele mari, "
+"Acest modul ascunde mesajele de intrare �i ie�ire din canalele mari, "
 "afi�但ndu-le doar pentru utilizatorii activi."
 
 #. This is used in the place of a timezone abbreviation if the
@@ -2650,7 +2655,7 @@
 
 #. Add general preferences.
 msgid "General Log Reading Configuration"
-msgstr "Op�iuni de citire a 樽nregistr�rilor"
+msgstr "Op�iuni de import a 樽nregistr�rilor"
 
 msgid "Fast size calculations"
 msgstr "Calcul rapid m�rime"
@@ -2669,7 +2674,7 @@
 #. *< priority
 #. *< id
 msgid "Log Reader"
-msgstr "Citire 樽nregistr�ri"
+msgstr "Import de 樽nregistr�ri"
 
 #. *< name
 #. *< version
@@ -2728,7 +2733,7 @@
 "apar� dedesubtul numelui de utilizator 樽n fereastra de discu�ii."
 
 msgid "Offline Message Emulation"
-msgstr "Emulare mesaje offline"
+msgstr "Emulare de mesaje offline"
 
 msgid "Save messages sent to an offline user as pounce."
 msgstr "Salveaz� ca 樽nt但mpinare mesajele trimise unui utilizator offline."
@@ -2738,7 +2743,7 @@
 "pounce from the `Buddy Pounce' dialog."
 msgstr ""
 "Restul de mesaje vor fi salvate ca 樽nt但mpinare. Pute�i apoi edita sau �terge "
-"樽nt但mpinarea din fereastra ���nt但mpin�ri contacte��."
+"樽nt但mpinarea din fereastra ���nt但mpin�ri pentru contacte��."
 
 #, c-format
 msgid ""
@@ -2754,7 +2759,8 @@
 
 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog"
 msgstr ""
-"Pute�i edita ori �terge 樽nt但mpinarea din fereastra ���nt但mpin�ri contacte"
+"Pute�i edita ori �terge 樽nt但mpinarea din fereastra ���nt但mpin�ri pentru "
+"contacte��"
 
 msgid "Yes"
 msgstr "Da"
@@ -2822,7 +2828,8 @@
 "This works for AIM, ICQ, XMPP, Sametime, and Yahoo!"
 msgstr ""
 "Deschide ferestrele sau taburile de discu�ii 樽nainte ca interlocutorii s� v� "
-"trimit� ce 樽ncepuser� s� scrie. Merge cu AIM, ICQ, XMPP, Sametime �i Yahoo!"
+"trimit� ce au 樽nceput s� scrie. Func�ioneaz� pentru protocoalele AIM, ICQ, "
+"XMPP, Sametime �i Yahoo!."
 
 msgid "You feel a disturbance in the force..."
 msgstr "Vine, vine, calc� totul 樽n picioare..."
@@ -2962,7 +2969,7 @@
 #. *< priority
 #. *< id
 msgid "Buddy State Notification"
-msgstr "Notific�ri st�ri contacte"
+msgstr "Notific�ri pentru st�rile contactelor"
 
 #. *< name
 #. *< version
@@ -3219,9 +3226,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Prenume"
 
@@ -3271,7 +3276,7 @@
 msgstr "Adaug� 樽n chat"
 
 msgid "Chat _name:"
-msgstr "_Nume chat:"
+msgstr "_Nume de chat:"
 
 #, c-format
 msgid "Unable to resolve hostname '%s': %s"
@@ -3342,7 +3347,7 @@
 msgstr "subiectul curent este: %s"
 
 msgid "No topic is set"
-msgstr "Nu exist� topic"
+msgstr "Nu exist� un subiect"
 
 msgid "File Transfer Failed"
 msgstr "Transferul fi�ierului a e�uat"
@@ -3378,7 +3383,7 @@
 msgstr "Afi�are MOTD"
 
 msgid "_Channel:"
-msgstr "C_hat:"
+msgstr "Ca_nal:"
 
 msgid "_Password:"
 msgstr "_Parol�:"
@@ -3405,7 +3410,7 @@
 msgstr "Utilizatori"
 
 msgid "Topic"
-msgstr "Topic"
+msgstr "Subiect"
 
 #. *< type
 #. *< ui_requirement
@@ -3505,7 +3510,7 @@
 
 #, c-format
 msgid "The topic for %s is: %s"
-msgstr "Topicul pentru %s este: %s"
+msgstr "Subiectul pentru %s este: %s"
 
 #, c-format
 msgid "Unknown message '%s'"
@@ -3528,17 +3533,17 @@
 msgstr "Ora local� a serverului IRC este:"
 
 msgid "No such channel"
-msgstr "Nu exist� un asemenea chat"
+msgstr "Nu exist� un asemenea canal"
 
 #. does this happen?
 msgid "no such channel"
-msgstr "nu exist� un asemenea chat"
+msgstr "nu exist� un asemenea canal"
 
 msgid "User is not logged in"
 msgstr "Utilizator neconectat"
 
 msgid "No such nick or channel"
-msgstr "Nu exist� un asemenea pseudonim sau chat"
+msgstr "Nu exist� un asemenea pseudonim sau canal"
 
 msgid "Could not send"
 msgstr "Nu s-a putut trimite"
@@ -3598,7 +3603,7 @@
 
 #, c-format
 msgid "You have parted the channel%s%s"
-msgstr "A�i p�r�sit chat-ul%s%s"
+msgstr "A�i p�r�sit canalul%s%s"
 
 msgid "Error: invalid PONG from server"
 msgstr "Eroare: PONG nevalid de la server"
@@ -3612,10 +3617,10 @@
 msgstr "Nu s-a putut intra 樽n %s: E nevoie de 樽nregistrare"
 
 msgid "Cannot join channel"
-msgstr "Nu s-a putut intra 樽n chat"
+msgstr "Nu s-a putut intra 樽n canal"
 
 msgid "Nick or channel is temporarily unavailable."
-msgstr "Pseudonimul sau chat-ul sunt temporar indisponibile."
+msgstr "Pseudonimul sau canalul sunt temporar indisponibile."
 
 #, c-format
 msgid "Wallops from %s"
@@ -3628,7 +3633,7 @@
 "away [message]:  Set an away message, or use no message to return from being "
 "away."
 msgstr ""
-"away [mesaj]:  Seta�i un mesaj 樽n absen�� sau, dac� nu preciza�i un mesaj, "
+"away [mesaj]:  Defini�i un mesaj 樽n absen�� sau, dac� nu preciza�i un mesaj, "
 "reveni�i din absen��."
 
 msgid "ctcp <nick> <msg>: sends ctcp msg to nick."
@@ -3641,8 +3646,8 @@
 "deop &lt;nick1&gt; [nick2] ...:  Remove channel operator status from "
 "someone. You must be a channel operator to do this."
 msgstr ""
-"deop &lt;pseudonim1&gt; [pseudonim2] ...:  Scoate�i din lista operatorilor "
-"un utilizator. Pentru aceasta e nevoie s� fi�i operator."
+"deop &lt;pseudonim1&gt; [pseudonim2] ...:  Scoate�i un utilizator din lista "
+"operatorilor canalului. Pentru aceasta e nevoie s� fi�i operator."
 
 msgid ""
 "devoice &lt;nick1&gt; [nick2] ...:  Remove channel voice status from "
@@ -3650,44 +3655,44 @@
 "must be a channel operator to do this."
 msgstr ""
 "devoice &lt;pseudonim1&gt;: [pseudonim2] ...:  �mpiedica�i anumi�i "
-"utilizatori s� trimit� mesaje 樽ntr-un chat moderat (+m). Pentru aceasta e "
-"nevoie s� fi�i operator."
+"utilizatori s� trimit� mesaje 樽ntr-un canal moderat (+m). Pentru aceasta e "
+"nevoie s� fi�i operator al canalului."
 
 msgid ""
 "invite &lt;nick&gt; [room]:  Invite someone to join you in the specified "
 "channel, or the current channel."
 msgstr ""
-"invite &lt;pseudonim&gt; [chat]:  Invita�i pe cineva s� vi se al�ture 樽n "
-"chat-ul curent sau 樽ntr-altul specificat."
+"invite &lt;pseudonim&gt; [canal]:  Invita�i pe cineva s� vi se al�ture 樽n "
+"canalul curent sau 樽ntr-altul specificat."
 
 msgid ""
 "j &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  Enter one or more "
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
-"j &lt;chat1&gt;[,chat2][,...] [cheie1][,cheie2][,...]:  Intra�i 樽n unul sau "
-"mai multe chat-uri, op�ional preciz但nd o cheie pentru fiecare, dac� e "
+"j &lt;canal1&gt;[,canal2][,...] [cheie1][,cheie2][,...]:  Intra�i 樽n unul "
+"sau mai multe canale, op�ional preciz但nd o cheie pentru fiecare, dac� e "
 "necesar."
 
 msgid ""
 "join &lt;room1&gt;[,room2][,...] [key1[,key2][,...]]:  Enter one or more "
 "channels, optionally providing a channel key for each if needed."
 msgstr ""
-"join &lt;chat1&gt;[,chat2][,...] [cheie1[,cheie2][,...]]:  Intra�i 樽n unul "
-"sau mai multe chat-uri, op�ional preciz但nd o cheie pentru fiecare, dac� e "
+"join &lt;canal1&gt;[,canal2][,...] [cheie1[,cheie2][,...]]:  Intra�i 樽n unul "
+"sau mai multe canale, op�ional preciz但nd o cheie pentru fiecare, dac� e "
 "necesar."
 
 msgid ""
 "kick &lt;nick&gt; [message]:  Remove someone from a channel. You must be a "
 "channel operator to do this."
 msgstr ""
-"kick &lt;pseudonim&gt; [mesaj]: Da�i pe cineva afar� din chat. Pentru "
-"aceasta e nevoie s� fi�i operator."
+"kick &lt;pseudonim&gt; [mesaj]: Da�i pe cineva afar� dintr-un canal. Pentru "
+"aceasta e nevoie s� fi�i operator al respectivului canal."
 
 msgid ""
 "list:  Display a list of chat rooms on the network. <i>Warning, some servers "
 "may disconnect you upon doing this.</i>"
 msgstr ""
-"list:  Listeaz� camerele de chat din re�ea. <i>Aten�ie! Anumite servere v� "
+"list:  Listeaz� canalele de chat din re�ea. <i>Aten�ie! Anumite servere v� "
 "vor deconecta la executarea acestei comenzi.</i>"
 
 msgid "me &lt;action to perform&gt;:  Perform an action."
@@ -3700,18 +3705,18 @@
 "mode &lt;+|-&gt;&lt;A-Za-z&gt; &lt;nick|channel&gt;:  Set or unset a channel "
 "or user mode."
 msgstr ""
-"mode &lt;+|-&gt;&lt;A-Za-z&gt; &lt;pseudonim|chat&gt;:  Seta�i sau reseta�i "
-"un chat sau un mod utilizator."
+"mode &lt;+|-&gt;&lt;A-Za-z&gt; &lt;pseudonim|canal&gt;:  Ini�ializa�i sau "
+"reini�ializa�i un canal ori un mod de utilizator."
 
 msgid ""
 "msg &lt;nick&gt; &lt;message&gt;:  Send a private message to a user (as "
 "opposed to a channel)."
 msgstr ""
 "msg &lt;pseudonim&gt; &lt;mesaj&gt;:  Trimite�i un mesaj privat c�tre un "
-"utilizator (nu 樽n camera de chat)."
+"utilizator (nu unul public 樽n canal)."
 
 msgid "names [channel]:  List the users currently in a channel."
-msgstr "names [chat]:  Lista�i utilizatorii din chat."
+msgstr "names [canal]:  Lista�i utilizatorii dintr-un canal."
 
 msgid "nick &lt;new nickname&gt;:  Change your nickname."
 msgstr "nick &lt;pseudonim nou&gt;:  Schimba�i pseudonimul propriu."
@@ -3721,14 +3726,15 @@
 
 msgid "notice &lt;target&lt;:  Send a notice to a user or channel."
 msgstr ""
-"me &lt;ac�iune&gt;:  Trimite o notificare c�tre un contact sau un chat."
+"me &lt;ac�iune&gt;:  Trimite o notificare c�tre un contact sau un canal."
 
 msgid ""
 "op &lt;nick1&gt; [nick2] ...:  Grant channel operator status to someone. You "
 "must be a channel operator to do this."
 msgstr ""
 "op &lt;pseudonim1&gt; [pseudonim2] ...:  Acorda�i status de operator unuia "
-"sau mai multor utilizatori. Pentru aceasta e nevoie s� fi�i operator."
+"sau mai multor utilizatori. Pentru aceasta e nevoie s� fi�i operator al "
+"canalului."
 
 msgid ""
 "operwall &lt;message&gt;:  If you don't know what this is, you probably "
@@ -3744,7 +3750,7 @@
 "part [room] [message]:  Leave the current channel, or a specified channel, "
 "with an optional message."
 msgstr ""
-"part [chat] [mesaj]: Ie�i�i din chat-ul curent (sau un altul specificat) cu "
+"part [canal] [mesaj]: Ie�i�i din canalul curent (sau un altul specificat) cu "
 "un mesaj op�ional."
 
 msgid ""
@@ -3759,7 +3765,7 @@
 "opposed to a channel)."
 msgstr ""
 "query &lt;pseudonim&gt; %lt;mesaj&gt;:  Trimite�i un mesaj privat c�tre un "
-"utilizator (nu c�tre un chat)."
+"utilizator (nu c�tre un canal)."
 
 msgid "quit [message]:  Disconnect from the server, with an optional message."
 msgstr "quit [mesaj]:  V� deconecta�i de la server cu un mesaj op�ional."
@@ -3771,18 +3777,19 @@
 "remove &lt;nick&gt; [message]:  Remove someone from a room. You must be a "
 "channel operator to do this."
 msgstr ""
-"remove &lt;pseudonim&gt; [mesaj]:  Scoate�i un utilizator din chat. Pentru "
-"aceasta trebuie s� fi�i operator."
+"remove &lt;pseudonim&gt; [mesaj]:  Scoate�i un utilizator dintr-un canal. "
+"Pentru aceasta trebuie s� fi�i operator al respectivului canal."
 
 msgid "time: Displays the current local time at the IRC server."
 msgstr "time: Arat� ora local� a serverului IRC."
 
 msgid "topic [new topic]:  View or change the channel topic."
-msgstr "topic [topic nou]:  Verifica�i sau schimba�i subiectul chat-ului."
+msgstr "topic [subiect nou]:  Verifica�i sau schimba�i subiectul canalului."
 
 msgid "umode &lt;+|-&gt;&lt;A-Za-z&gt;:  Set or unset a user mode."
 msgstr ""
-"umode &lt;+|-&gt;&lt;A-Za-z&gt;:  Seta�i sau reseta�i un mod utilizator."
+"umode &lt;+|-&gt;&lt;A-Za-z&gt;:  Ini�ializa�i sau reini�ializa�i un mod "
+"pentru utilizator."
 
 msgid "version [nick]: send CTCP VERSION request to a user"
 msgstr ""
@@ -3793,7 +3800,8 @@
 "must be a channel operator to do this."
 msgstr ""
 "voice &lt;pseudonim1&gt; [pseudonim2] ...:  Acorda�i unui utilizator "
-"posibilitatea de a scrie ceva 樽ntr-un chat moderat."
+"posibilitatea de a scrie ceva 樽ntr-un canal moderat. Trebuie s� fi�i "
+"operator al respectivului canal."
 
 msgid ""
 "wallops &lt;message&gt;:  If you don't know what this is, you probably can't "
@@ -3835,7 +3843,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Serverul necesit� autentificare 樽n clar printr-o conexiune necriptat�"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "R�spuns nevalid de la server."
 
@@ -3898,7 +3909,7 @@
 "it.  This indicates a likely MITM attack"
 msgstr ""
 "Acest server suport� ��channel binding��, dar nu pare s� anun�e acest lucru. "
-"Poate fi vorba despre un atac MITM."
+"Poate fi vorba despre un atac ��man in the middle��."
 
 msgid "Server does not support channel binding"
 msgstr "Serverul nu suport� ��channel binding��"
@@ -3978,7 +3989,6 @@
 msgid "Postal Code"
 msgstr "Cod po�tal"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "�ar�"
 
@@ -4082,7 +4092,7 @@
 msgstr "Desubscrie"
 
 msgid "Initiate _Chat"
-msgstr "Ini�iaz� o _discu�ie"
+msgstr "Ini�iaz� un _chat"
 
 msgid "Log In"
 msgstr "Autentificare"
@@ -4148,20 +4158,20 @@
 msgstr "Caut� 樽n acest director"
 
 msgid "_Room:"
-msgstr "Ca_mer�:"
+msgstr "Ca_nal:"
 
 msgid "_Server:"
-msgstr "_Server:"
+msgstr "Ser_ver:"
 
 msgid "_Handle:"
 msgstr "A_dministrare:"
 
 #, c-format
 msgid "%s is not a valid room name"
-msgstr "%s nu este un nume valid de chat"
+msgstr "%s nu este un nume valid de canal"
 
 msgid "Invalid Room Name"
-msgstr "Nume incorect de chat"
+msgstr "Nume incorect de canal"
 
 #, c-format
 msgid "%s is not a valid server name"
@@ -4172,10 +4182,10 @@
 
 #, c-format
 msgid "%s is not a valid room handle"
-msgstr "%s nu este un nume valid de chat"
+msgstr "%s nu este un nume valid de canal"
 
 msgid "Invalid Room Handle"
-msgstr "Titlu incorect de chat"
+msgstr "Titlu incorect de canal"
 
 msgid "Configuration error"
 msgstr "Eroare de configurare"
@@ -4184,19 +4194,20 @@
 msgstr "Configurare nereu�it�"
 
 msgid "Room Configuration Error"
-msgstr "Eroare la configurarea camerei de chat"
+msgstr "Eroare la configurarea canalului"
 
 msgid "This room is not capable of being configured"
-msgstr "Aceast� camer� de chat nu poate fi configurat�"
+msgstr "Acest canal nu poate fi configurat"
 
 msgid "Registration error"
 msgstr "Eroare la 樽nregistrare"
 
 msgid "Nick changing not supported in non-MUC chatrooms"
-msgstr "Schimbarea pseudonimului nu e suportat� 樽n camerele de chat non-MUC"
+msgstr ""
+"Schimbarea pseudonimului nu e suportat� 樽n canalele de chat de tip non-MUC"
 
 msgid "Error retrieving room list"
-msgstr "Eroare la ob�inerea listei camerelor de chat"
+msgstr "Eroare la ob�inerea listei canalelor"
 
 msgid "Invalid Server"
 msgstr "Server nevalid"
@@ -4208,7 +4219,7 @@
 msgstr "Selecta�i un server de conferin�e pentru interogare"
 
 msgid "Find Rooms"
-msgstr "Caut� camere de chat"
+msgstr "Caut� canale"
 
 msgid "Affiliations:"
 msgstr "Afilieri:"
@@ -4595,7 +4606,7 @@
 
 #, c-format
 msgid "Unable to set role \"%s\" for user: %s"
-msgstr "Nu se poate seta rolul ��%s�� pentru utilizatorul: %s"
+msgstr "Nu se poate defini rolul ��%s�� pentru utilizatorul: %s"
 
 #, c-format
 msgid "Unable to kick user %s"
@@ -4666,31 +4677,31 @@
 msgstr "Acest protocol nu suport� PEP, nu se poate alege o stare"
 
 msgid "config:  Configure a chat room."
-msgstr "config:  Configura�i o camer� de chat."
+msgstr "config:  Configura�i un canal de chat."
 
 msgid "configure:  Configure a chat room."
-msgstr "configure:  Configura�i o camer� de chat."
+msgstr "configure:  Configura�i un canal de chat."
 
 msgid "part [message]:  Leave the room."
-msgstr "part [message]:  Ie�i�i din camer�."
+msgstr "part [message]:  Ie�i�i din canal."
 
 msgid "register:  Register with a chat room."
-msgstr "register:  V� 樽nregistra�i 樽ntr-un chat."
+msgstr "register:  �nregistrare 樽ntr-un canal de chat."
 
 msgid "topic [new topic]:  View or change the topic."
 msgstr "topic [subiect nou]: Verifica�i sau schimba�i subiectul."
 
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr ""
-"ban &lt;nume utilizator&gt; [chat]:  Bloca�i accesul unui utilizator 樽n chat."
+"ban &lt;utilizator&gt; [motiv]:  Bloca�i accesul unui utilizator 樽n canal."
 
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
 "affiliate &lt;de�in�tor|administrator|membru|renegat|nimic&gt; [pseudonim1] "
-"[pseudonim2] ...: Afla�i utilizatorii cu o afiliere sau seta�i afilierea "
-"utilizatorilor fa�� de camera de chat."
+"[pseudonim2] ...: Afla�i utilizatorii cu o afiliere sau defini�i afilierea "
+"utilizatorilor fa�� de canal."
 
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
@@ -4698,16 +4709,16 @@
 msgstr ""
 "role &lt;moderator|participant|vizitator|nimic&gt; [pseudonim1] "
 "[pseudonim2] ...: Afla�i utilizatorii cu un anume rol sau schimba�i rolul "
-"utilizatorilor 樽n camera de chat."
+"utilizatorilor 樽n canal."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
-msgstr "invite &lt;nume ales&gt; [chat]:  Invita�i un utilizator 樽ntr-un chat."
+msgstr "invite &lt;utilizator&gt; [mesaj]:  Invita�i un utilizator 樽n canal."
 
 msgid "join: &lt;room&gt; [password]:  Join a chat on this server."
-msgstr "join: &lt;chat&gt; [parol�]:  Intra�i 樽ntr-un chat al unui server."
+msgstr "join: &lt;canal&gt; [parol�]:  Intra�i 樽ntr-un canal pe acest server."
 
 msgid "kick &lt;user&gt; [reason]:  Kick a user from the room."
-msgstr "kick &lt;utilizator&gt; [motiv]:  Da�i afar� din chat un utilizator."
+msgstr "kick &lt;utilizator&gt; [motiv]:  Da�i un utilizator afar� din canal ."
 
 msgid ""
 "msg &lt;user&gt; &lt;message&gt;:  Send a private message to another user."
@@ -4793,7 +4804,7 @@
 
 #, c-format
 msgid "The topic is: %s"
-msgstr "Topicul este: %s"
+msgstr "Subiectul este: %s"
 
 #, c-format
 msgid "Message delivery to %s failed: %s"
@@ -4825,24 +4836,24 @@
 
 #, c-format
 msgid "Error joining chat %s"
-msgstr "Eroare la intrarea 樽n camera de chat %s"
+msgstr "Eroare la intrarea 樽n canalul de chat %s"
 
 #, c-format
 msgid "Error in chat %s"
-msgstr "Eroare 樽n camera de chat %s"
+msgstr "Eroare 樽n canalul de chat %s"
 
 msgid "Create New Room"
-msgstr "Creeaz� o nou� camer� de chat"
+msgstr "Creare a unui nou canal"
 
 msgid ""
 "You are creating a new room.  Would you like to configure it, or accept the "
 "default settings?"
 msgstr ""
-"Sunte�i pe cale s� crea�i o nou� camer� de chat. Dori�i s� o configura�i sau "
+"Sunte�i pe cale s� crea�i un nou canal. Dori�i s� 樽l configura�i sau "
 "accepta�i op�iunile implicite?"
 
 msgid "_Configure Room"
-msgstr "Op�iuni _camer� de chat"
+msgstr "Op�iuni pentru _canal"
 
 msgid "_Accept Defaults"
 msgstr "_Op�iuni implicite"
@@ -5396,7 +5407,8 @@
 #, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
 msgstr ""
-"%s v-a trimis o invita�ie de chat audio, pentru care nu exist� 樽nc� suport."
+"%s v-a trimis o invita�ie pentru un apel de voce, pentru care nu exist� 樽nc� "
+"suport."
 
 msgid "Nudge"
 msgstr "Buzz"
@@ -5502,10 +5514,10 @@
 msgstr "Pagin�"
 
 msgid "Playing a game"
-msgstr "Joac� ceva"
+msgstr "M� joc"
 
 msgid "Working"
-msgstr "Lucreaz�"
+msgstr "Lucrez"
 
 msgid "Has you"
 msgstr "V� are 樽n list�"
@@ -5991,7 +6003,7 @@
 msgstr "Cele dou� PIN-uri introduse nu se potrivesc."
 
 msgid "The Display Name you entered is invalid."
-msgstr "Aliasul introdus este nevalid."
+msgstr "Aliasul introdus nu este valid."
 
 msgid ""
 "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
@@ -6081,6 +6093,9 @@
 msgid "Connecting..."
 msgstr "Conectare..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Aliasul introdus este prea scurt."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "PIN-ul introdus are o lungime nevalid� [7-10]."
 
@@ -6152,6 +6167,20 @@
 msgid "Retrieving User Information..."
 msgstr "Se ob�in detaliile utilizatorului..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "A�i fost dat afar� din acest MultiMX."
+
+msgid "was kicked"
+msgstr "a fost dat afar�"
+
+msgid "_Room Name:"
+msgstr "Numele ca_nalului:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "A�i fost invitat"
+
 msgid "Loading menu..."
 msgstr "Se 樽ncarc� meniul..."
 
@@ -6165,9 +6194,19 @@
 msgid "Hidden Number"
 msgstr "Num�r ascuns"
 
+msgid "No profile available"
+msgstr "Niciun profil disponibil"
+
+msgid "This contact does not have a profile."
+msgstr "Acest contact nu are un profil."
+
 msgid "Your MXit ID..."
 msgstr "ID propriu MXit..."
 
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Reinvit�"
+
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
 msgid "WAP Server"
@@ -6179,20 +6218,6 @@
 msgid "Enable splash-screen popup"
 msgstr "Activare popup pentru imaginea de pornire"
 
-#. you were kicked
-msgid "You have been kicked from this MultiMX."
-msgstr "A�i fost dat afar� din acest MultiMX."
-
-msgid "was kicked"
-msgstr "a fost dat afar�"
-
-msgid "_Room Name:"
-msgstr "Nume came_r�:"
-
-#. Display system message in chat window
-msgid "You have invited"
-msgstr "A�i fost invitat"
-
 msgid "Last Online"
 msgstr "Ultima oar� online"
 
@@ -6265,7 +6290,7 @@
 msgstr "Eroare la transferul de fi�iere"
 
 msgid "Cannot create MultiMx room"
-msgstr "Nu se poate crea camera MultiMX"
+msgstr "Nu se poate crea canalul MultiMX"
 
 msgid "MultiMx Invitation Error"
 msgstr "Eroare de invita釘ie MultiMx"
@@ -6733,7 +6758,7 @@
 "gre�ite"
 
 msgid "You cannot add the same person twice to a conversation"
-msgstr "Nu pute�i ad�uga aceea�i persoan� de dou� ori 樽ntr-o conversa�ie"
+msgstr "Nu pute�i ad�uga aceea�i persoan� de dou� ori 樽ntr-o discu�ie"
 
 msgid "You have reached your limit for the number of contacts allowed"
 msgstr "A�i atins num�rul maxim permis de contacte"
@@ -7000,10 +7025,10 @@
 "potrive�te cu cea aleas� de %s sau %s utilizeaz� un client problematic)."
 
 msgid "Could not join chat room"
-msgstr "Nu s-a putut intra 樽n camera de chat"
+msgstr "Nu s-a putut intra 樽n canalul de chat"
 
 msgid "Invalid chat room name"
-msgstr "Nume nevalid de camer� de chat"
+msgstr "Nume nevalid pentru canalul de chat"
 
 msgid "Invalid error"
 msgstr "Eroare nevalid�"
@@ -7063,16 +7088,16 @@
 msgstr "Nu se poate trimite mesajul c�tre %s: %s"
 
 msgid "Thinking"
-msgstr "M� g但ndesc"
+msgstr "Pe g但nduri"
 
 msgid "Shopping"
 msgstr "La cump�r�turi"
 
 msgid "Questioning"
-msgstr "Pun 樽ntreb�ri"
+msgstr "�n dubiu"
 
 msgid "Eating"
-msgstr "M�n但nc"
+msgstr "La mas�"
 
 msgid "Watching a movie"
 msgstr "V�d un film"
@@ -7096,7 +7121,7 @@
 msgstr "Dorm"
 
 msgid "Using a PDA"
-msgstr "Folosesc un PDA"
+msgstr "Sunt pe PDA"
 
 msgid "Meeting friends"
 msgstr "Cu prietenii"
@@ -7109,10 +7134,10 @@
 
 #. "I am mobile." / "John is mobile."
 msgid "Mobile"
-msgstr "Mobil"
+msgstr "Pe mobil"
 
 msgid "Searching the web"
-msgstr "Caut pe net"
+msgstr "M� dau pe net"
 
 msgid "At a party"
 msgstr "La o petrecere"
@@ -7206,15 +7231,15 @@
 "IM.  Try using file transfer instead.\n"
 msgstr ""
 "%s a 樽ncercat s� v� trimit� un fi�ier de %s, dar se permite doar trimiterea "
-"de fi�iere mai mici de %s 樽n discu�iile directe. �ncerca�i transferul de "
-"fi�iere.\n"
+"de fi�iere mai mici de %s 樽n discu�iile directe. �ncerca�i mai bine "
+"transferul de fi�iere.\n"
 
 #, c-format
 msgid "File %s is %s, which is larger than the maximum size of %s."
 msgstr "Fi�ierul %s are %s, care dep��e�te m�rimea maxim� de %s."
 
 msgid "Free For Chat"
-msgstr "Disponibil"
+msgstr "Disponibil pentru discu�ii"
 
 msgid "Not Available"
 msgstr "Indisponibil"
@@ -7481,7 +7506,15 @@
 
 #, c-format
 msgid "You have been disconnected from chat room %s."
-msgstr "Contul v-a fost deconectat din camera de chat %s."
+msgstr "A�i pierdut conexiunea cu canalul de chat %s."
+
+msgid "The new formatting is invalid."
+msgstr "Formatul nou este nevalid."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Formatarea numelor de utilizatori nu poate schimba dec但t spa�iile goale �i "
+"capitalizarea."
 
 msgid "Pop-Up Message"
 msgstr "Mesaj popup"
@@ -7571,16 +7604,16 @@
 "posibil� trimiterea de imagini IM."
 
 msgid "Unable to set AIM profile."
-msgstr "Nu se poate seta profilul AIM."
+msgstr "Nu se poate ini�ializa profilul AIM."
 
 msgid ""
 "You have probably requested to set your profile before the login procedure "
 "completed.  Your profile remains unset; try setting it again when you are "
 "fully connected."
 msgstr ""
-"Se pare c� a�i cerut s� seta�i profilul 樽nainte de a v� autentifica. "
-"Profilul v� va r�m但ne la fel. �ncerca�i s�-l seta�i din nou dup� o conectare "
-"pe deplin reu�it�."
+"Se pare c� a�i cerut s� v� ini�ializa�i profilul 樽nainte de a v� "
+"autentifica. Profilul v� va r�m但ne neschimbat �i 樽ncerca�i s�-l "
+"reini�ializa�i dup� o conectare pe deplin reu�it�."
 
 #, c-format
 msgid ""
@@ -7710,10 +7743,10 @@
 
 #, c-format
 msgid "Buddy Comment for %s"
-msgstr "Comentariu contact pentru %s"
+msgstr "Comentariu pentru contactul %s"
 
 msgid "Buddy Comment:"
-msgstr "Comentariu contact:"
+msgstr "Comentariu pentru contact:"
 
 #, c-format
 msgid "You have selected to open a Direct IM connection with %s."
@@ -7760,14 +7793,6 @@
 msgid "ICQ Privacy Options"
 msgstr "Op�iuni de securitate ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "Formatul nou este nevalid."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Formatarea numelor de utilizatori nu poate schimba dec但t spa�iile goale �i "
-"capitalizarea."
-
 msgid "Change Address To:"
 msgstr "Schimb� adresa 樽n:"
 
@@ -7836,7 +7861,7 @@
 msgstr "Nu utiliza criptare"
 
 msgid "Use clientLogin"
-msgstr "Utiliza�i clientLogin"
+msgstr "Utilizeaz� clientLogin"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7875,75 +7900,6 @@
 "necesar� pentru imaginile IM. Pentru c� adresa IP v� va fi expus�, lua�i 樽n "
 "considerare riscurile la care v� expune�i."
 
-msgid "Invalid SNAC"
-msgstr "SNAC nevalid"
-
-msgid "Server rate limit exceeded"
-msgstr "S-a dep��it limitarea de server"
-
-msgid "Client rate limit exceeded"
-msgstr "S-a dep��it limitarea de client"
-
-msgid "Service unavailable"
-msgstr "Serviciu indisponibil"
-
-msgid "Service not defined"
-msgstr "Serviciu nedefinit"
-
-msgid "Obsolete SNAC"
-msgstr "SNAC 樽nvechit"
-
-msgid "Not supported by host"
-msgstr "Nesuportat de c�tre server"
-
-msgid "Not supported by client"
-msgstr "Nesuportat de c�tre client"
-
-msgid "Refused by client"
-msgstr "Refuzat de c�tre client"
-
-msgid "Reply too big"
-msgstr "R�spuns supradimensionat"
-
-msgid "Responses lost"
-msgstr "R�spunsuri pierdute"
-
-msgid "Request denied"
-msgstr "Cerere respins�"
-
-msgid "Busted SNAC payload"
-msgstr "�nc�rc�tur� SNAC nevalid�"
-
-msgid "Insufficient rights"
-msgstr "Drepturi insuficiente"
-
-msgid "In local permit/deny"
-msgstr "�n lista permi�i/refuza�i local�"
-
-msgid "Warning level too high (sender)"
-msgstr "Nivel de avertizare prea ridicat (pentru expeditor)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Nivel de avertizare prea ridicat (pentru destinatar)"
-
-msgid "User temporarily unavailable"
-msgstr "Utilizatorul este temporar indisponibil."
-
-msgid "No match"
-msgstr "Nicio potrivire"
-
-msgid "List overflow"
-msgstr "List� suprasaturat�"
-
-msgid "Request ambiguous"
-msgstr "Cerere ambigu�"
-
-msgid "Queue full"
-msgstr "Coad� plin�"
-
-msgid "Not while on AOL"
-msgstr "Nu (c但t timp e pe AOL)"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Avatar"
@@ -8021,7 +7977,7 @@
 msgstr "Nivel de avertizare"
 
 msgid "Buddy Comment"
-msgstr "Comentariu contact"
+msgstr "Comentariu pentru contact"
 
 #, c-format
 msgid "User information not available: %s"
@@ -8062,6 +8018,75 @@
 msgid "Capabilities"
 msgstr "Facilit��i"
 
+msgid "Invalid SNAC"
+msgstr "SNAC nevalid"
+
+msgid "Server rate limit exceeded"
+msgstr "S-a dep��it limitarea de server"
+
+msgid "Client rate limit exceeded"
+msgstr "S-a dep��it limitarea de client"
+
+msgid "Service unavailable"
+msgstr "Serviciu indisponibil"
+
+msgid "Service not defined"
+msgstr "Serviciu nedefinit"
+
+msgid "Obsolete SNAC"
+msgstr "SNAC 樽nvechit"
+
+msgid "Not supported by host"
+msgstr "Nesuportat de c�tre server"
+
+msgid "Not supported by client"
+msgstr "Nesuportat de c�tre client"
+
+msgid "Refused by client"
+msgstr "Refuzat de c�tre client"
+
+msgid "Reply too big"
+msgstr "R�spuns supradimensionat"
+
+msgid "Responses lost"
+msgstr "R�spunsuri pierdute"
+
+msgid "Request denied"
+msgstr "Cerere respins�"
+
+msgid "Busted SNAC payload"
+msgstr "�nc�rc�tur� SNAC nevalid�"
+
+msgid "Insufficient rights"
+msgstr "Drepturi insuficiente"
+
+msgid "In local permit/deny"
+msgstr "�n lista permi�i/refuza�i local�"
+
+msgid "Warning level too high (sender)"
+msgstr "Nivel de avertizare prea ridicat (pentru expeditor)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Nivel de avertizare prea ridicat (pentru destinatar)"
+
+msgid "User temporarily unavailable"
+msgstr "Utilizatorul este temporar indisponibil."
+
+msgid "No match"
+msgstr "Nicio potrivire"
+
+msgid "List overflow"
+msgstr "List� suprasaturat�"
+
+msgid "Request ambiguous"
+msgstr "Cerere ambigu�"
+
+msgid "Queue full"
+msgstr "Coad� plin�"
+
+msgid "Not while on AOL"
+msgstr "Nu (c但t timp e pe AOL)"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8395,7 +8420,7 @@
 
 #. XXX: Should this be "Topic"?
 msgid "Room Title"
-msgstr "Numele camerei"
+msgstr "Numele canalului"
 
 msgid "Notice"
 msgstr "Notificare"
@@ -8654,14 +8679,14 @@
 msgid "Select Server"
 msgstr "Selecta�i serverul"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Conectare folosind TCP"
@@ -8673,7 +8698,10 @@
 msgstr "Afi�are �tiri server"
 
 msgid "Show chat room when msg comes"
-msgstr "Arat� camera de chat c但nd vine msg"
+msgstr "Arat� canalul de chat la primirea unui mesaj privat"
+
+msgid "Use default font"
+msgstr "Utilizeaz� fontul implicit"
 
 msgid "Keep alive interval (seconds)"
 msgstr "Interval ��keep alive�� (secunde)"
@@ -8797,7 +8825,7 @@
 "Room %u, reply 0x%02X"
 msgstr ""
 "R�spuns de eroare %s(0x%02X)\n"
-"Camera %u, r�spuns 0x%02X"
+"Canalul %u, r�spuns 0x%02X"
 
 msgid "QQ Qun Command"
 msgstr "Comand� QQ Qun"
@@ -8918,7 +8946,7 @@
 "Please enter a topic for the new conference, and an invitation message to be "
 "sent to %s"
 msgstr ""
-"Introduce�i un topic pentru noua conferin�� �i un mesaj pentru invitarea "
+"Introduce�i un subiect pentru noua conferin�� �i un mesaj pentru invitarea "
 "utilizatorului %s"
 
 msgid "New Conference"
@@ -8956,7 +8984,7 @@
 msgstr "Trimite un anun� TEST"
 
 msgid "Topic:"
-msgstr "Topic:"
+msgstr "Subiect:"
 
 msgid "No Sametime Community Server specified"
 msgstr "Nu s-a specificat un server de comunitate Sametime"
@@ -8986,7 +9014,7 @@
 msgstr "Ultim client cunoscut"
 
 msgid "User Name"
-msgstr "Nume utilizator"
+msgstr "Nume de utilizator"
 
 msgid "Sametime ID"
 msgstr "ID Sametime"
@@ -9217,7 +9245,7 @@
 msgstr "IM parolat"
 
 msgid "Cannot set IM key"
-msgstr "Nu se poate seta cheia IM"
+msgstr "Nu se poate ini�ializa cheia IM"
 
 msgid "Set IM Password"
 msgstr "Introducere parol� IM"
@@ -9342,17 +9370,17 @@
 
 #, c-format
 msgid "Channel %s does not exist in the network"
-msgstr "Chat-ul %s nu exist� 樽n re�ea"
+msgstr "Canalul %s nu exist� 樽n re�ea"
 
 msgid "Channel Information"
-msgstr "Detalii chat"
+msgstr "Detaliile canalului"
 
 msgid "Cannot get channel information"
-msgstr "Nu s-au putut ob�ine detalii despre chat"
+msgstr "Nu s-au putut ob�ine detalii despre canal"
 
 #, c-format
 msgid "<b>Channel Name:</b> %s"
-msgstr "<b>Nume chat:</b> %s"
+msgstr "<b>Numele canalului:</b> %s"
 
 #, c-format
 msgid "<br><b>User Count:</b> %d"
@@ -9360,24 +9388,24 @@
 
 #, c-format
 msgid "<br><b>Channel Founder:</b> %s"
-msgstr "<br><b>Ini�iator chat:</b> %s"
+msgstr "<br><b>Ini�iatorul canalului:</b> %s"
 
 #, c-format
 msgid "<br><b>Channel Cipher:</b> %s"
-msgstr "<br><b>Cifru chat:</b> %s"
+msgstr "<br><b>Cifru de canal:</b> %s"
 
 #. Definition of HMAC: http://en.wikipedia.org/wiki/HMAC
 #, c-format
 msgid "<br><b>Channel HMAC:</b> %s"
-msgstr "<br><b>Chat HMAC:</b> %s"
+msgstr "<br><b>HMAC de canal:</b> %s"
 
 #, c-format
 msgid "<br><b>Channel Topic:</b><br>%s"
-msgstr "<br><b>Topic chat:</b><br>%s"
+msgstr "<br><b>Subiectul canalului:</b><br>%s"
 
 #, c-format
 msgid "<br><b>Channel Modes:</b> "
-msgstr "<br><b>Moduri chat:</b> "
+msgstr "<br><b>Modurile canalului:</b> "
 
 #, c-format
 msgid "<br><b>Founder Key Fingerprint:</b><br>%s"
@@ -9388,17 +9416,17 @@
 msgstr "<br><b>Amprent� silabic� a cheii fondatorului:</b><br>%s"
 
 msgid "Add Channel Public Key"
-msgstr "Adaug� cheia public� a chat-ului"
+msgstr "Adaug� cheia public� a canalului"
 
 #. Add new public key
 msgid "Open Public Key..."
 msgstr "Deschide cheia public�..."
 
 msgid "Channel Passphrase"
-msgstr "Fraz� secret� pentru chat"
+msgstr "Fraz� secret� pentru canal"
 
 msgid "Channel Public Keys List"
-msgstr "List� chei publice chat"
+msgstr "Lista cheilor publice pentru canal"
 
 #, c-format
 msgid ""
@@ -9408,14 +9436,14 @@
 "channel public keys are set then only users whose public keys are listed are "
 "able to join."
 msgstr ""
-"Autentificarea 樽n chat este utilizat� pentru a bloca accesul neautorizat 樽n "
-"chat. Autentificarea poate fi pe baz� de fraz� secret� sau pe baz� de "
-"semn�turi digitale. �n primul caz, trebuie permis accesul ini�ial la chat. "
-"�n cel de-al doilea, doar utilizatorii ale c�ror semn�turi digitale sunt "
-"listate pot intra 樽n chat."
+"Autentificarea 樽n canal este utilizat� pentru a bloca accesul neautorizat. "
+"Autentificarea poate fi pe baz� de fraz� secret� sau pe baz� de semn�turi "
+"digitale. �n primul caz, trebuie permis accesul ini�ial la canal. �n cel de-"
+"al doilea, doar utilizatorii ale c�ror semn�turi digitale sunt listate pot "
+"intra 樽n canal."
 
 msgid "Channel Authentication"
-msgstr "Autentificare 樽n chat"
+msgstr "Autentificare 樽n canal"
 
 msgid "Add / Remove"
 msgstr "Adaug�/�terge"
@@ -9428,23 +9456,25 @@
 
 #, c-format
 msgid "Please enter the %s channel private group name and passphrase."
-msgstr "Introduce�i numele grupului chat-ului privat %s �i fraza secret�."
+msgstr ""
+"Introduce�i numele grupului privat al canalului %s �i fraza secret� asociat�."
 
 msgid "Add Channel Private Group"
-msgstr "Adaug� grupul chat-ului privat"
+msgstr "Adaug� grupul privat al canalului"
 
 msgid "User Limit"
-msgstr "Limit� utilizatori"
+msgstr "Limit� de utilizatori"
 
 msgid "Set user limit on channel. Set to zero to reset user limit."
 msgstr ""
-"Seta�i num�rul maxim de utilizatori 樽n chat. Zero pentru num�r nelimitat."
+"Defini�i num�rul maxim de utilizatori 樽n canal. Zero pentru un num�r "
+"nelimitat."
 
 msgid "Invite List"
-msgstr "List� invita�ii"
+msgstr "List� de invita�ii"
 
 msgid "Ban List"
-msgstr "List� interdic�ii"
+msgstr "List� de interdic�ii"
 
 msgid "Add Private Group"
 msgstr "Adaug� grupul privat"
@@ -9456,7 +9486,7 @@
 msgstr "Ini�ializeaz� permanent"
 
 msgid "Set User Limit"
-msgstr "Introducere limit� utilizatori"
+msgstr "Ini�ializeaz� limita de utilizatori"
 
 msgid "Reset Topic Restriction"
 msgstr "Anuleaz� blocarea subiectului"
@@ -9465,22 +9495,22 @@
 msgstr "Blocheaz� subiectul"
 
 msgid "Reset Private Channel"
-msgstr "Reini�ializeaz� chat-ul privat"
+msgstr "Reini�ializeaz� canalul privat"
 
 msgid "Set Private Channel"
-msgstr "Ini�ializeaz� chat-ul privat"
+msgstr "Ini�ializeaz� canalul privat"
 
 msgid "Reset Secret Channel"
-msgstr "Reini�ializeaz� chat-ul secret"
+msgstr "Reini�ializeaz� canalul secret"
 
 msgid "Set Secret Channel"
-msgstr "Ini�ializeaz� chat-ul secret"
+msgstr "Ini�ializeaz� canalul secret"
 
 #, c-format
 msgid ""
 "You have to join the %s channel before you are able to join the private group"
 msgstr ""
-"Trebuie s� intra�i 樽n chat-ul %s 樽nainte de a v� putea al�tura grupului "
+"Trebuie s� intra�i 樽n canalul %s 樽nainte de a v� putea al�tura grupului "
 "privat."
 
 msgid "Join Private Group"
@@ -9546,15 +9576,15 @@
 
 #, c-format
 msgid "<I>%s</I> set channel <I>%s</I> modes to: %s"
-msgstr "<I>%s</I> a setat modurile chat-ului <I>%s</I> astfel: %s"
+msgstr "<I>%s</I> a definit modurile canalului <I>%s</I> astfel: %s"
 
 #, c-format
 msgid "<I>%s</I> removed all channel <I>%s</I> modes"
-msgstr "<I>%s</I> a 樽nl�turat toate modurile chat-ului <I>%s</I>"
+msgstr "<I>%s</I> a 樽nl�turat toate modurile canalului <I>%s</I>"
 
 #, c-format
 msgid "<I>%s</I> set <I>%s's</I> modes to: %s"
-msgstr "<I>%s</I> a setat modurile pentru <I>%s</I> astfel: %s"
+msgstr "<I>%s</I> a definit modurile pentru <I>%s</I> astfel: %s"
 
 #, c-format
 msgid "<I>%s</I> removed all <I>%s's</I> modes"
@@ -9595,11 +9625,11 @@
 
 #, c-format
 msgid "You are channel founder on <I>%s</I>"
-msgstr "Sunte�i ini�iatorul chat-ului <I>%s</I>"
+msgstr "Sunte�i ini�iator de canal pentru <I>%s</I>"
 
 #, c-format
 msgid "Channel founder on <I>%s</I> is <I>%s</I>"
-msgstr "Ini�iatorul chat-ului 樽n <I>%s</I> este <I>%s</I>"
+msgstr "Ini�iatorul canalului 樽n <I>%s</I> este <I>%s</I>"
 
 msgid "Real Name"
 msgstr "Nume real"
@@ -9629,10 +9659,10 @@
 msgstr "Schimbarea pseudonimului a e�uat"
 
 msgid "Roomlist"
-msgstr "List� camere de chat"
+msgstr "List� de canale"
 
 msgid "Cannot get room list"
-msgstr "Nu se poate ob�ine lista camerelor de chat"
+msgstr "Nu se poate ob�ine lista canalelor"
 
 msgid "Network is empty"
 msgstr "Re�eaua este goal�"
@@ -9672,19 +9702,19 @@
 msgstr ""
 "Ora pornirii serverului local: %s\n"
 "Uptime pentru serverul local: %s\n"
-"Clien�i server local: %d\n"
-"Chat-uri server local: %d\n"
-"Operatori server local: %d\n"
-"Operatori router local: %d\n"
-"Clien�i celul� local�: %d\n"
-"Chat-uri celul� local�: %d\n"
-"Servere celul� local�: %d\n"
+"Clien�i pe serverul local: %d\n"
+"Canale pe serverul local: %d\n"
+"Operatori pe serverul local: %d\n"
+"Operatori pe routerul local: %d\n"
+"Clien�i 樽n celula local�: %d\n"
+"Canale 樽n celula local�: %d\n"
+"Servere 樽n celula local�: %d\n"
 "Total clien�i: %d\n"
-"Total chat-uri: %d\n"
+"Total canale: %d\n"
 "Total servere: %d\n"
 "Total routere: %d\n"
-"Total operatori servere: %d\n"
-"Total operatori routere: %d\n"
+"Total operatori pe servere: %d\n"
+"Total operatori pe routere: %d\n"
 
 msgid "Network Statistics"
 msgstr "Statistici re�ea"
@@ -9891,46 +9921,46 @@
 msgstr "Utilizatorul <I>%s</I> nu este prezent 樽n re�ea"
 
 msgid "Topic too long"
-msgstr "Topic prea lung"
+msgstr "Subiect prea lung"
 
 msgid "You must specify a nick"
 msgstr "Trebuie s� specifica�i un pseudonim"
 
 #, c-format
 msgid "channel %s not found"
-msgstr "chat-ul %s nu a fost g�sit"
+msgstr "canalul %s nu a fost g�sit"
 
 #, c-format
 msgid "channel modes for %s: %s"
-msgstr "modurile de chat pentru %s sunt: %s"
+msgstr "modurile de canal pentru %s sunt: %s"
 
 #, c-format
 msgid "no channel modes are set on %s"
-msgstr "chat-ul %s nu are setat niciun mod"
+msgstr "canalul %s nu are niciun mod definit"
 
 #, c-format
 msgid "Failed to set cmodes for %s"
-msgstr "Nu s-au putut seta modurile chat-ului %s"
+msgstr "Nu s-au putut defini modurile canalului %s"
 
 #, c-format
 msgid "Unknown command: %s, (may be a client bug)"
 msgstr "Comand� necunoscut�: %s (poate fi o problem� de client)"
 
 msgid "part [channel]:  Leave the chat"
-msgstr "part [chat]:  P�r�se�te un chat"
+msgstr "part [canal]:  P�r�se�te un canal"
 
 msgid "leave [channel]:  Leave the chat"
-msgstr "leave [chat]:  P�r�se�te un chat"
+msgstr "leave [canal]:  P�r�se�te un canal"
 
 msgid "topic [&lt;new topic&gt;]:  View or change the topic"
-msgstr "topic [&lt;nou topic&gt;]: Arat� sau schimb� subiectul"
+msgstr "topic [&lt;nou subiect&gt;]: Arat� sau schimb� subiectul"
 
 msgid "join &lt;channel&gt; [&lt;password&gt;]:  Join a chat on this network"
 msgstr ""
-"join &lt;chat&gt; [&lt;parol�&gt;]:  Intr� 樽ntr-un chat din aceast� re�ea"
+"join &lt;canal&gt; [&lt;parol�&gt;]:  Intr� 樽ntr-un canal din aceast� re�ea"
 
 msgid "list:  List channels on this network"
-msgstr "list:  Listeaz� chat-urile din aceast� re�ea"
+msgstr "list:  Listeaz� canalele din aceast� re�ea"
 
 msgid "whois &lt;nick&gt;:  View nick's information"
 msgstr "whois &lt;pseudonim&gt;:  Arat� detaliile utilizatorului"
@@ -9970,15 +10000,15 @@
 "cmode &lt;channel&gt; [+|-&lt;modes&gt;] [arguments]:  Change or display "
 "channel modes"
 msgstr ""
-"cmode &lt;chat&gt; [+|-&lt;moduri&gt;] [argumente]:   Schimb� sau arat� "
-"modurile chat-ului."
+"cmode &lt;canal&gt; [+|-&lt;moduri&gt;] [argumente]:   Schimb� sau arat� "
+"modurile canalului."
 
 msgid ""
 "cumode &lt;channel&gt; +|-&lt;modes&gt; &lt;nick&gt;:  Change nick's modes "
 "on channel"
 msgstr ""
-"cumode &lt;chat&gt; +|-&lt;moduri&gt; &lt;pseudonim&gt;:  Schimb� modurile "
-"respectivului utilizator 樽n chat"
+"cumode &lt;canal&gt; +|-&lt;moduri&gt; &lt;pseudonim&gt;:  Schimb� modurile "
+"respectivului utilizator 樽n canal"
 
 msgid "umode &lt;usermodes&gt;:  Set your modes in the network"
 msgstr "umode &lt:moduri_utilizator&gt;:  Alege�i-v� modurile 樽n re�ea"
@@ -9990,21 +10020,21 @@
 "invite &lt;channel&gt; [-|+]&lt;nick&gt;:  invite nick or add/remove from "
 "channel invite list"
 msgstr ""
-"invite &lt;chat&gt; [-|+]&lt;pseudonim&gt;:  invit� respectivul utilizator "
-"sau adaug�-l/�terge-l din lista invita�ilor chat-ului"
+"invite &lt;canal&gt; [-|+]&lt;pseudonim&gt;:  invit� respectivul utilizator "
+"sau adaug�-l/�terge-l din lista invita�ilor canalului"
 
 msgid "kick &lt;channel&gt; &lt;nick&gt; [comment]:  Kick client from channel"
 msgstr ""
-"kick &lt;chat&gt; &lt;pseudonim&gt; [comentariu]: D� afar� din chat un "
-"utilizator."
+"kick &lt;canal&gt; &lt;pseudonim&gt; [comentariu]: D� un utilizator afar� "
+"din canal"
 
 msgid "info [server]:  View server administrative details"
 msgstr "info [server]:  Arat� detalii administrative despre server"
 
 msgid "ban [&lt;channel&gt; +|-&lt;nick&gt;]:  Ban client from channel"
 msgstr ""
-"ban [&lt;chat&gt; +|-&lt;pseudonim&gt]:  Interzice utilizatorului respectiv "
-"accesul la acest chat"
+"ban [&lt;canal&gt; +|-&lt;pseudonim&gt]:  Interzice utilizatorului respectiv "
+"accesul la acest canal"
 
 msgid "getkey &lt;nick|server&gt;:  Retrieve client's or server's public key"
 msgstr ""
@@ -10018,14 +10048,14 @@
 msgstr "ping:  PING c�tre serverul curent"
 
 msgid "users &lt;channel&gt;:  List users in channel"
-msgstr "user &lt;chat&gt;:  Listeaz� utilizatorii dintr-un chat"
+msgstr "user &lt;canal&gt;:  Listeaz� utilizatorii dintr-un canal"
 
 msgid ""
 "names [-count|-ops|-halfops|-voices|-normal] &lt;channel(s)&gt;:  List "
 "specific users in channel(s)"
 msgstr ""
-"names [-count|-ops|-halfops|-voices|-normal] &lt;chat(-uri)&gt;:  Listeaz� "
-"anumite tipuri de utilizatori din chat-urile precizate"
+"names [-count|-ops|-halfops|-voices|-normal] &lt;canal(e)&gt;:  Listeaz� "
+"anumite tipuri de utilizatori din canalele precizate"
 
 #. *< type
 #. *< ui_requirement
@@ -10091,7 +10121,7 @@
 
 #, c-format
 msgid "User Name: \t%s\n"
-msgstr "Nume utilizator: \t%s\n"
+msgstr "Nume de utilizator: \t%s\n"
 
 #, c-format
 msgid "Email: \t\t%s\n"
@@ -10167,7 +10197,7 @@
 "%s sent message to whiteboard on %s channel. Would you like to open the "
 "whiteboard?"
 msgstr ""
-"%s a trimis un mesaj c�tre ��whiteboard�� 樽n chat-ul %s. Dori�i s� deschid un "
+"%s a trimis un mesaj c�tre ��whiteboard�� 樽n canalul %s. Dori�i s� deschid un "
 "whiteboard?"
 
 msgid "Whiteboard"
@@ -10281,10 +10311,10 @@
 msgstr "Autentificare domeniu"
 
 msgid "join &lt;room&gt;:  Join a chat room on the Yahoo network"
-msgstr "join: &lt;room&gt;:  Intra�i 樽ntr-un chat din re�eaua Yahoo!"
+msgstr "join: &lt;chat&gt;:  Intra�i 樽ntr-un canal de chat din re�eaua Yahoo!"
 
 msgid "list: List rooms on the Yahoo network"
-msgstr "list:  Listeaz� chat-urile din re�eaua Yahoo"
+msgstr "list:  Listeaz� canalele de chat din re�eaua Yahoo"
 
 msgid "doodle: Request user to start a Doodle session"
 msgstr "doodle:  Cere�i unui utilizator s� ini�ie o sesiune de m但zg�lituri"
@@ -10315,16 +10345,16 @@
 msgstr "Port transfer de fi�iere"
 
 msgid "Chat room locale"
-msgstr "Op�iuni locale chat"
+msgstr "Localizarea pentru chat"
 
 msgid "Ignore conference and chatroom invitations"
-msgstr "Ignor� invita�iile la conferin�e �i chat"
+msgstr "Ignor� invita�iile la conferin�e �i canale de chat"
 
 msgid "Use account proxy for HTTP and HTTPS connections"
 msgstr "Utilizeaz� proxy-ul contului pentru conexiuni HTTP �i HTTPS"
 
 msgid "Chat room list URL"
-msgstr "Adres� list� camere de chat"
+msgstr "Adresa URL a listei canalelor de chat"
 
 msgid "Yahoo JAPAN ID..."
 msgstr "Identitate Yahoo Japonia..."
@@ -10345,8 +10375,8 @@
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
 msgstr ""
-"%s v-a trimis o invita�ie de acces la camera web, invita�ie ce nu este 樽nc� "
-"suportat�"
+"%s v-a trimis o invita�ie de acces la camera web, pentru care 樽nc� nu exist� "
+"suport."
 
 msgid "Your SMS was not delivered"
 msgstr "Mesajul SMS nu v-a fost trimis"
@@ -10653,11 +10683,11 @@
 
 #. -6
 msgid "Unknown room"
-msgstr "Camer� de chat necunoscut�"
+msgstr "Canal necunoscut"
 
 #. -15
 msgid "Maybe the room is full"
-msgstr "Camera de chat e probabil plin�"
+msgstr "Canalul e probabil plin"
 
 #. -35
 msgid "Not available"
@@ -10668,23 +10698,23 @@
 "able to rejoin a chatroom"
 msgstr ""
 "Eroare necunoscut�. S-ar putea s� trebuiasc� s� v� deconecta�i pentru cinci "
-"minute 樽nainte de a reintra 樽n camera de chat."
+"minute 樽nainte de a reintra 樽n canalul de chat."
 
 #, c-format
 msgid "You are now chatting in %s."
-msgstr "A�i intrat 樽n camera de chat %s."
+msgstr "A�i intrat 樽n chat-ul %s."
 
 msgid "Failed to join buddy in chat"
 msgstr "Intrarea 樽n chat al�turi de acest contact a e�uat"
 
 msgid "Maybe they're not in a chat?"
-msgstr "Poate nu e sau nu sunt 樽n niciun chat?"
+msgstr "Poate c� ei nu sunt 樽n niciun chat?"
 
 msgid "Fetching the room list failed."
-msgstr "Ob�inerea listei camerelor de chat a e�uat."
+msgstr "Ob�inerea listei de canale a e�uat."
 
 msgid "Voices"
-msgstr "Audio"
+msgstr "Voci"
 
 msgid "Webcams"
 msgstr "Video"
@@ -10693,10 +10723,10 @@
 msgstr "Probleme la conectare"
 
 msgid "Unable to fetch room list."
-msgstr "Nu se poate ob�ine lista camerelor de chat."
+msgstr "Nu se poate ob�ine lista canalelor."
 
 msgid "User Rooms"
-msgstr "Camere de chat utilizatori"
+msgstr "Canale de utilizatori"
 
 msgid "Connection problem with the YCHT server"
 msgstr "Probleme de conexiune cu serverul YCHT."
@@ -10743,13 +10773,14 @@
 
 msgid "instance &lt;instance&gt;: Set the instance to be used on this class"
 msgstr ""
-"instance &lt;instan��&gt;:  Seta�i instan�a de utilizat 樽n aceast� clas�"
+"instance &lt;instan��&gt;:  Defini�i instan�a de utilizat 樽n aceast� clas�"
 
 msgid "inst &lt;instance&gt;: Set the instance to be used on this class"
-msgstr "inst &lt;instan��&gt;:  Seta�i instan�a de utilizat 樽n aceast� clas�"
+msgstr "inst &lt;instan��&gt;:  Defini�i instan�a de utilizat 樽n aceast� clas�"
 
 msgid "topic &lt;instance&gt;: Set the instance to be used on this class"
-msgstr "topic &lt;instan��&gt;:  Seta�i instan�a de utilizat 樽n aceast� clas�"
+msgstr ""
+"topic &lt;instan��&gt;:  Defini�i instan�a de utilizat 樽n aceast� clas�"
 
 msgid "sub &lt;class&gt; &lt;instance&gt; &lt;recipient&gt;: Join a new chat"
 msgstr ""
@@ -10895,12 +10926,12 @@
 "%s has invited %s to the chat room %s:\n"
 "%s"
 msgstr ""
-"%s a invitat utilizatorul %s 樽n camera de chat %s\n"
+"%s a invitat utilizatorul %s 樽n canalul de chat %s\n"
 "%s"
 
 #, c-format
 msgid "%s has invited %s to the chat room %s\n"
-msgstr "%s a invitat utilizatorul %s 樽n camera de chat %s\n"
+msgstr "%s a invitat utilizatorul %s 樽n canalul de chat %s\n"
 
 msgid "Accept chat invitation?"
 msgstr "Accepta�i invita�ia la chat?"
@@ -10932,7 +10963,7 @@
 msgstr "Eroare SSL necunoscut�"
 
 msgid "Unset"
-msgstr "Nesetat"
+msgstr "Nedefinit"
 
 msgid "Do not disturb"
 msgstr "Nu deranja�i"
@@ -11084,7 +11115,7 @@
 
 #. 10061
 msgid "Connection refused."
-msgstr "Conexiune resetat�."
+msgstr "Conexiune refuzat�."
 
 #. 10048
 msgid "Address already in use."
@@ -11105,7 +11136,8 @@
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
 msgstr ""
-"Mesaje instant 樽n re�elele AIM, Google Talk, Jabber/XMPP, MSN, Yahoo etc."
+"Chat prin mesaje instant. Suport� re�elele AIM, Google Talk, Jabber/XMPP, "
+"MSN, Yahoo �i altele."
 
 msgid "Internet Messenger"
 msgstr "Mesagerie instant"
@@ -11124,14 +11156,14 @@
 msgstr "Nume _utilizator:"
 
 msgid "Remember pass_word"
-msgstr "_Salvare parol�"
+msgstr "Sal_vare parol�"
 
 #. Build the user options frame.
 msgid "User Options"
 msgstr "Op�iuni personale"
 
 msgid "_Local alias:"
-msgstr "_Alias local:"
+msgstr "Alias l_ocal:"
 
 msgid "New _mail notifications"
 msgstr "Notificare la _mail nou"
@@ -11186,7 +11218,7 @@
 msgstr "P_ort:"
 
 msgid "Pa_ssword:"
-msgstr "Pa_rol�:"
+msgstr "_Parol�:"
 
 msgid "Unable to save new account"
 msgstr "Nu se poate salva noul cont"
@@ -11232,8 +11264,8 @@
 "<b>Adaug�...</b> de c但te ori dori�i.\n"
 "\n"
 "Ve�i putea reveni la aceast� fereastr� pentru a ad�uga, edita sau �terge "
-"conturi utiliz但nd <b>Conturi->Administrare conturi</b> 樽n fereastra listei "
-"de contacte."
+"conturi utiliz但nd <b>Conturi->Administrare</b> 樽n fereastra listei de "
+"contacte."
 
 #, c-format
 msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"
@@ -11242,7 +11274,7 @@
 
 #. Buddy List
 msgid "Background Color"
-msgstr "Culoare fundal"
+msgstr "Culoarea fundalului"
 
 msgid "The background color for the buddy list"
 msgstr "Culoarea de fundal pentru lista de contacte"
@@ -11257,7 +11289,7 @@
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its expanded state
 msgid "Expanded Background Color"
-msgstr "Culoare fundal la desfacere"
+msgstr "Culoarea fundalului la desfacere"
 
 msgid "The background color of an expanded group"
 msgstr "Culoarea de fundal a unui grup desf�cut"
@@ -11265,15 +11297,15 @@
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list group when in its expanded state
 msgid "Expanded Text"
-msgstr "Text text la desfacere"
+msgstr "Culoarea textului la desfacere"
 
 msgid "The text information for when a group is expanded"
-msgstr "Informa�ia text pentru un grup desf�cut"
+msgstr "Detaliile textului pentru un grup desf�cut"
 
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list group when in its collapsed state
 msgid "Collapsed Background Color"
-msgstr "Culoare fundal la str但ngere"
+msgstr "Culoarea fundalului la str但ngere"
 
 msgid "The background color of a collapsed group"
 msgstr "Culoarea de fundal a unui grup str但ns"
@@ -11284,13 +11316,13 @@
 msgstr "Text la str但ngere"
 
 msgid "The text information for when a group is collapsed"
-msgstr "Informa�ia text pentru un grup str但ns"
+msgstr "Detaliile textului pentru un grup str但ns"
 
 #. Buddy
 #. Note to translators: These two strings refer to the background color
 #. of a buddy list contact or chat room
 msgid "Contact/Chat Background Color"
-msgstr "Culoare fundal contact/chat"
+msgstr "Culoarea fundalului pentru contacte �i chat-uri"
 
 msgid "The background color of a contact or chat"
 msgstr "Culoarea de fundal a unui contact sau chat"
@@ -11298,64 +11330,65 @@
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list contact when in its expanded state
 msgid "Contact Text"
-msgstr "Text contact"
+msgstr "Textul contactului"
 
 msgid "The text information for when a contact is expanded"
-msgstr "Informa�ia text pentru un contact str但ns"
+msgstr "Detaliile textului pentru un contact desf�cut"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
 msgid "Online Text"
-msgstr "Text online"
+msgstr "Textul contactelor online"
 
 msgid "The text information for when a buddy is online"
-msgstr "Informa�ia text pentru un contact online"
+msgstr "Detaliile textului pentru contacte online"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is away
 msgid "Away Text"
-msgstr "Text absent"
+msgstr "Textul contactelor absente"
 
 msgid "The text information for when a buddy is away"
-msgstr "Informa�ia text pentru un contact absent"
+msgstr "Detaliile textului pentru contacte absente"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
 msgid "Offline Text"
-msgstr "Text offline"
+msgstr "Textul contactelor offline"
 
 msgid "The text information for when a buddy is offline"
-msgstr "Informa�ia text pentru un contact offline"
+msgstr "Detaliile textului pentru contacte offline"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
 msgid "Idle Text"
-msgstr "Text inactiv"
+msgstr "Textul contactelor inactive"
 
 msgid "The text information for when a buddy is idle"
-msgstr "Informa�ia text pentru un contact inactiv"
+msgstr "Detaliile textului pentru contacte inactive"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
 msgid "Message Text"
-msgstr "Text mesaj"
+msgstr "Textul mesajelor necitite"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr "Informa�ia text pentru un contact cu un mesaj necitit"
+msgstr "Detaliile textului pentru contacte cu mesaje necitite"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
 msgid "Message (Nick Said) Text"
-msgstr "Textul mesajului (utilizatorul a spus)"
+msgstr "Textul mesajelor noi"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nickname"
 msgstr ""
-"Informa�ia text pentru un chat cu un mesaj necitit ce v� men�ioneaz� numele"
+"Detaliile textului pentru un chat cu un mesaj necitit ce v� men�ioneaz� "
+"numele"
 
 msgid "The text information for a buddy's status"
-msgstr "Informa�ia text pentru starea unui contact"
+msgstr "Detaliile textului pentru statusul unui contact"
 
 #, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
@@ -11371,8 +11404,8 @@
 "choosing 'Expand' from the contact's context menu"
 msgstr ""
 "Unirea acestor contacte le va face s� apar� ca o singur� intrare 樽n lista de "
-"contacte �i s� foloseasc� o singur� fereastr� de conversa�ie. Le pute�i "
-"separa din nou aleg但nd ��Desf��� din meniul contextual al contactului."
+"contacte �i s� foloseasc� o singur� fereastr� de discu�ie. Le pute�i separa "
+"din nou aleg但nd ��Desf��� din meniul contextual al contactului."
 
 msgid "Please update the necessary fields."
 msgstr "Trebuie s� actualiza�i c但mpurile cerute."
@@ -11383,11 +11416,10 @@
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
 "join.\n"
-msgstr ""
-"Introduce�i informa�iile despre chat-ul 樽n care dori�i s� participa�i.\n"
+msgstr "Introduce�i detaliile chat-ului 樽n care dori�i s� intra�i.\n"
 
 msgid "Room _List"
-msgstr "_List� de camere"
+msgstr "_List� de canale"
 
 msgid "_Block"
 msgstr "_Blocheaz�"
@@ -11493,7 +11525,7 @@
 msgstr "Mesaj (op�ional)"
 
 msgid "Edit User Mood"
-msgstr "Schimbare a propriei dispozi�ii"
+msgstr "Schimba�i-v� dispozi�ia"
 
 #. NOTE: Do not set any accelerator to Control+O. It is mapped by
 #. gtk_blist_key_press_cb to "Get User Info" on the selected buddy.
@@ -11551,14 +11583,14 @@
 msgstr "/_Conturi"
 
 msgid "/Accounts/Manage Accounts"
-msgstr "/Conturi/Administrare conturi"
+msgstr "/Conturi/Administrare"
 
 #. Tools
 msgid "/_Tools"
 msgstr "/_Unelte"
 
 msgid "/Tools/Buddy _Pounces"
-msgstr "/Unelte/�_nt但mpin�ri contacte"
+msgstr "/Unelte/�_nt但mpin�ri pentru contacte"
 
 msgid "/Tools/_Certificates"
 msgstr "/Unelte/_Certificate"
@@ -11582,7 +11614,7 @@
 msgstr "/Unelte/_Transfer de fi�iere"
 
 msgid "/Tools/R_oom List"
-msgstr "/Unelte/_List� camere de chat"
+msgstr "/Unelte/_Lista canalelor"
 
 msgid "/Tools/System _Log"
 msgstr "/Unelte/�n_registr�ri de sistem"
@@ -11690,7 +11722,7 @@
 msgstr "/Unelte/Securitate"
 
 msgid "/Tools/Room List"
-msgstr "/Unelte/List� camere de chat"
+msgstr "/Unelte/Lista canalelor"
 
 #, c-format
 msgid "%d unread message from %s\n"
@@ -11741,7 +11773,7 @@
 "parte:"
 
 msgid "<b>Username:</b>"
-msgstr "<b>Nume utilizator:</b>"
+msgstr "<b>Nume de utilizator:</b>"
 
 msgid "<b>Password:</b>"
 msgstr "<b>Parol�:</b>"
@@ -11764,8 +11796,8 @@
 "<span weight='bold' size='larger'>Bun venit 樽n %s!</span>\n"
 "\n"
 "Nu ave�i niciun cont activ. Activa�i-v� conturile de mesagerie instant 樽n "
-"fereastra <b>Conturi</b>, accesibil� pe calea <b>Conturi->Administrare "
-"conturi</b>. Abia dup� activare ve�i putea utiliza conturile definite."
+"fereastra <b>Conturi</b>, accesibil� pe calea <b>Conturi->Administrare</b>. "
+"Abia dup� activare ve�i putea utiliza conturile definite."
 
 #. set the Show Offline Buddies option. must be done
 #. * after the treeview or faceprint gets mad. -Robot101
@@ -11786,19 +11818,19 @@
 msgstr "/Contacte/Arat�/Iconi�ele de protocol"
 
 msgid "Add a buddy.\n"
-msgstr "Adaug� un contact.\n"
+msgstr "Ad�uga�i un contact.\n"
 
 msgid "Buddy's _username:"
-msgstr "Nume de _utilizator:"
+msgstr "_Nume de utilizator:"
 
 msgid "(Optional) A_lias:"
-msgstr "A_lias (op�ional):"
+msgstr "_Alias (op�ional):"
 
 msgid "Add buddy to _group:"
-msgstr "Adaug� contactul 樽n _grupul:"
+msgstr "_Grup:"
 
 msgid "This protocol does not support chat rooms."
-msgstr "Acest protocol nu suport� camere de chat."
+msgstr "Acest protocol nu suport� canale de chat."
 
 msgid ""
 "You are not currently signed on with any protocols that have the ability to "
@@ -11810,20 +11842,20 @@
 "Please enter an alias, and the appropriate information about the chat you "
 "would like to add to your buddy list.\n"
 msgstr ""
-"Introduce�i un alias �i informa�iile necesare pentru acel chat pe care "
-"dori�i s�-l ad�uga�i 樽n lista de contacte.\n"
+"Introduce�i un alias �i informa�iile necesare pentru chat-ul pe care dori�i "
+"s�-l ad�uga�i 樽n lista de contacte.\n"
 
 msgid "A_lias:"
-msgstr "A_lias:"
+msgstr "_Alias:"
 
 msgid "_Group:"
 msgstr "_Grup:"
 
 msgid "Auto_join when account connects."
-msgstr "Intr� a_utomat la autentificarea contului."
+msgstr "I_ntr� automat la autentificarea contului."
 
 msgid "_Remain in chat after window is closed."
-msgstr "_R�m但i 樽n chat dup� 樽nchiderea ferestrei."
+msgstr "R�m但i 樽n chat _dup� 樽nchiderea ferestrei."
 
 msgid "Please enter the name of the group to be added."
 msgstr "Introduce�i numele grupului de ad�ugat."
@@ -11875,7 +11907,7 @@
 "acel contact."
 
 msgid "Invite Buddy Into Chat Room"
-msgstr "Invit� contactul 樽n camera de chat"
+msgstr "Invit� contactul 樽n canalul de chat"
 
 msgid "_Buddy:"
 msgstr "_Contact:"
@@ -11934,7 +11966,7 @@
 msgstr "/Discu�ie/_Mesaj nou..."
 
 msgid "/Conversation/Join a _Chat..."
-msgstr "/Discu�ie/Intrare 樽ntr-un _chat..."
+msgstr "/Discu�ie/Intrare 樽ntr-un c_hat..."
 
 msgid "/Conversation/_Find..."
 msgstr "/Discu�ie/C_aut�..."
@@ -11961,10 +11993,10 @@
 msgstr "/Discu�ie/Media/Ap_el audio\\/video"
 
 msgid "/Conversation/Se_nd File..."
-msgstr "/Discu�ie/_Trimite un fi�ier..."
+msgstr "/Discu�ie/Trimite un _fi�ier..."
 
 msgid "/Conversation/Get _Attention"
-msgstr "/Discu�ie/Cere _aten�ie"
+msgstr "/Discu�ie/Cere a_ten�ie"
 
 msgid "/Conversation/Add Buddy _Pounce..."
 msgstr "/Discu�ie/Adaug� 樽_nt但mpinare..."
@@ -11979,7 +12011,7 @@
 msgstr "/Discu�ie/Mai m_ult"
 
 msgid "/Conversation/Al_ias..."
-msgstr "/Discu�ie/Al_ias..."
+msgstr "/Discu�ie/A_lias..."
 
 msgid "/Conversation/_Block..."
 msgstr "/Discu�ie/_Blocheaz�..."
@@ -12112,7 +12144,7 @@
 
 #. Setup the label telling how many people are in the room.
 msgid "0 people in room"
-msgstr "Nicio persoan� 樽n chat"
+msgstr "Nicio persoan� 樽n canal"
 
 msgid "Close Find bar"
 msgstr "�nchide bara de c�utare"
@@ -12123,9 +12155,9 @@
 #, c-format
 msgid "%d person in room"
 msgid_plural "%d people in room"
-msgstr[0] "o persoan� 樽n chat"
-msgstr[1] "%d persoane 樽n chat"
-msgstr[2] "%d de persoane 樽n chat"
+msgstr[0] "o persoan� 樽n canal"
+msgstr[1] "%d persoane 樽n canal"
+msgstr[2] "%d de persoane 樽n canal"
 
 msgid "Stopped Typing"
 msgstr "M-am oprit din scris"
@@ -12170,7 +12202,7 @@
 msgstr "Nu 樽n fereastra chat-urilor"
 
 msgid "New window"
-msgstr "�n fereastr� nou�"
+msgstr "�n ferestre noi"
 
 msgid "By group"
 msgstr "Dup� grup"
@@ -12229,9 +12261,6 @@
 msgid "Fatal Error"
 msgstr "Erori fatale"
 
-msgid "bug master"
-msgstr "admin al rapoartelor de erori"
-
 msgid "artist"
 msgstr "artist"
 
@@ -12411,6 +12440,9 @@
 msgid "Maithili"
 msgstr "Maithili"
 
+msgid "Meadow Mari"
+msgstr "Meadow Mari"
+
 msgid "Macedonian"
 msgstr "Macedonean�"
 
@@ -12642,7 +12674,7 @@
 msgstr "Alias contact"
 
 msgid "Alias Chat"
-msgstr "Alias chat"
+msgstr "Alias pentru chat"
 
 msgid "Enter an alias for this chat."
 msgstr "Introduce�i un nou alias pentru acest chat."
@@ -12826,64 +12858,64 @@
 msgstr "F�r� iconi�e 樽n _selec�ie"
 
 msgid "Hyperlink color"
-msgstr "Culoare adres�"
+msgstr "Culoarea adreselor web"
 
 msgid "Color to draw hyperlinks."
-msgstr "Culoare pentru afi�area adreselor."
+msgstr "Culoarea pentru afi�area adreselor web."
 
 msgid "Hyperlink visited color"
-msgstr "Culoare adres� web"
+msgstr "Culoarea adreselor web vizitate"
 
 msgid "Color to draw hyperlink after it has been visited (or activated)."
-msgstr "Culoare pentru afi�area adreselor web vizitate (ori activate)."
+msgstr "Culoarea pentru afi�area adreselor web vizitate (ori activate)."
 
 msgid "Hyperlink prelight color"
-msgstr "Culoare eviden�iere adres�"
+msgstr "Culoarea de eviden�iere a adresei"
 
 msgid "Color to draw hyperlinks when mouse is over them."
-msgstr "Culoare pentru afi�area adreselor sub cursorul de maus."
+msgstr "Culoarea de afi�are a adreselor web sub cursorul de maus."
 
 msgid "Sent Message Name Color"
-msgstr "Culoare pentru mesaje trimise"
+msgstr "Culoarea mesajelor trimise"
 
 msgid "Color to draw the name of a message you sent."
-msgstr "Culoare de utilizat pentru numele mesajelor pe care le trimite�i."
+msgstr "Culoarea de utilizat pentru numele mesajelor pe care le trimite�i."
 
 msgid "Received Message Name Color"
-msgstr "Culoare pentru mesaje primite"
+msgstr "Culoarea mesajelor primite"
 
 msgid "Color to draw the name of a message you received."
-msgstr "Culoare de utilizat pentru numele mesajelor pe care le primi�i."
+msgstr "Culoarea de utilizat pentru numele mesajelor pe care le primi�i."
 
 msgid "\"Attention\" Name Color"
-msgstr "Culoare de aten�ionare"
+msgstr "Culoarea de aten�ionare"
 
 msgid "Color to draw the name of a message you received containing your name."
-msgstr "Culoare de utilizat pentru numele mesajelor ce v� pomenesc numele."
+msgstr "Culoarea de utilizat pentru numele mesajelor ce v� pomenesc numele."
 
 msgid "Action Message Name Color"
-msgstr "Culoare pentru mesajele comenzi"
+msgstr "Culoarea pentru mesajele comenzi"
 
 msgid "Color to draw the name of an action message."
-msgstr "Culoare de utilizat pentru numele mesajelor de tip comand�."
+msgstr "Culoarea de utilizat pentru numele mesajelor de tip comand�."
 
 msgid "Action Message Name Color for Whispered Message"
-msgstr "Culoare pentru mesajele comenzi 樽n mod discret"
+msgstr "Culoarea pentru mesajele comenzi 樽n mod discret"
 
 msgid "Color to draw the name of a whispered action message."
-msgstr "Culoare de utilizat pentru numele mesajelor discrete de ac�iune."
+msgstr "Culoarea de utilizat pentru numele mesajelor discrete de ac�iune."
 
 msgid "Whisper Message Name Color"
-msgstr "Culoare pentru mesajele discrete"
+msgstr "Culoarea mesajelor discrete"
 
 msgid "Color to draw the name of a whispered message."
-msgstr "Culoare de utilizat pentru numele mesajelor discrete."
+msgstr "Culoarea de utilizat pentru numele mesajelor discrete."
 
 msgid "Typing notification color"
 msgstr "Culoarea mesajelor de notificare"
 
 msgid "The color to use for the typing notification"
-msgstr "Culoare de utilizat pentru notificarea tast�rii"
+msgstr "Culoarea de utilizat pentru notific�rile de tastare"
 
 msgid "Typing notification font"
 msgstr "Fontul mesajelor de notificare"
@@ -12951,7 +12983,7 @@
 msgstr "Inserare adres�"
 
 msgid "_Insert"
-msgstr "Inserea_z�"
+msgstr "Ins_erare"
 
 #, c-format
 msgid "Failed to store image: %s\n"
@@ -13009,7 +13041,7 @@
 msgstr "Nume font"
 
 msgid "Foreground Color"
-msgstr "Culoare text"
+msgstr "Culoarea textului"
 
 msgid "Reset Formatting"
 msgstr "F�r� formatare"
@@ -13051,16 +13083,16 @@
 msgstr "_Nume font"
 
 msgid "Foreground _color"
-msgstr "Culoare te_xt"
+msgstr "Culoarea te_xtului"
 
 msgid "Bac_kground color"
-msgstr "Culoare f_undal"
+msgstr "Culoarea f_undalului"
 
 msgid "_Image"
 msgstr "_Imagine"
 
 msgid "_Link"
-msgstr "_Link"
+msgstr "_Adres� web"
 
 msgid "_Horizontal rule"
 msgstr "Linie _orizontal�"
@@ -13082,16 +13114,16 @@
 "Are you sure you want to permanently delete the log of the conversation with "
 "%s which started at %s?"
 msgstr ""
-"Sigur dori�i s� �terge�i definitiv 樽nregistrarea conversa�iei cu %s 樽nceput� "
-"la %s?"
+"Sigur dori�i s� �terge�i definitiv 樽nregistrarea discu�iei cu %s 樽nceput� la "
+"%s?"
 
 #, c-format
 msgid ""
 "Are you sure you want to permanently delete the log of the conversation in "
 "%s which started at %s?"
 msgstr ""
-"Sigur dori�i s� �terge�i definitiv 樽nregistrarea conversa�iei din %s "
-"樽nceput� la %s?"
+"Sigur dori�i s� �terge�i definitiv 樽nregistrarea discu�iei din %s 樽nceput� "
+"la %s?"
 
 #, c-format
 msgid ""
@@ -13265,8 +13297,15 @@
 msgid "New Pounces"
 msgstr "�nt但mpinare nou�"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
-msgstr "�nchide"
+msgstr "�terge"
 
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">�nt但mpinare</span>"
@@ -13360,13 +13399,13 @@
 msgstr "O_prirea din tastare"
 
 msgid "Sends a _message"
-msgstr "Trimiterea unui _mesaj"
+msgstr "Tr_imiterea unui mesaj"
 
 msgid "Ope_n an IM window"
 msgstr "Desc_hide o discu�ie"
 
 msgid "_Pop up a notification"
-msgstr "Deschide _o fereastr� de notificare"
+msgstr "De_schide o fereastr� de notificare"
 
 msgid "Send a _message"
 msgstr "Trimite un mesa_j"
@@ -13387,13 +13426,13 @@
 msgstr "_Testare"
 
 msgid "P_ounce only when my status is not Available"
-msgstr "�nt但mpinare doar 樽n starea de _indisponibilitate"
+msgstr "�nt但mpinare doar 樽n starea de indisponibi_litate"
 
 msgid "_Recurring"
 msgstr "Re_curent�"
 
 msgid "Pounce Target"
-msgstr "�int� 樽nt但mpinare"
+msgstr "�inta 樽nt但mpin�rii"
 
 msgid "Started typing"
 msgstr "A 樽nceput s� tasteze"
@@ -13493,7 +13532,7 @@
 msgstr "Pentru mesajele necitite"
 
 msgid "Conversation Window"
-msgstr "Fereastra de discu�ii"
+msgstr "Fereastr� de discu�ii"
 
 msgid "_Hide new IM conversations:"
 msgstr "Ascunde discu�iile _noi:"
@@ -13515,7 +13554,7 @@
 msgstr "Arat� _butoanele de 樽nchidere a taburilor"
 
 msgid "_Placement:"
-msgstr "_Plasament:"
+msgstr "_Plasare:"
 
 msgid "Top"
 msgstr "Sus"
@@ -13536,7 +13575,7 @@
 msgstr "Vertical in dreapta"
 
 msgid "N_ew conversations:"
-msgstr "D_iscu�ii noi:"
+msgstr "Di_scu�ii noi:"
 
 msgid "Show _formatting on incoming messages"
 msgstr "_P�streaz� formatarea mesajelor primite"
@@ -13554,7 +13593,7 @@
 msgstr "Notific� contactele c但nd le scri_u"
 
 msgid "Highlight _misspelled words"
-msgstr "_Eviden�iaz� gre�elile de ortografie"
+msgstr "E_viden�iaz� gre�elile de ortografie"
 
 msgid "Use smooth-scrolling"
 msgstr "Derulare cu efect"
@@ -13598,7 +13637,7 @@
 msgstr "Utilizeaz� adresa IP _autodetectat�: %s"
 
 msgid "ST_UN server:"
-msgstr "Server ST_UN:"
+msgstr "Ser_ver STUN:"
 
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">Exemplu: stunserver.org</span>"
@@ -13610,7 +13649,7 @@
 msgstr "Porturi"
 
 msgid "_Enable automatic router port forwarding"
-msgstr "Acti_veaz� automat ��port forwarding�� 樽n ruter"
+msgstr "Activea_z� automat ��port forwarding�� 樽n ruter"
 
 msgid "_Manually specify range of ports to listen on:"
 msgstr "_Specifica�i intervalul de porturi:"
@@ -13632,7 +13671,7 @@
 msgstr "Port _UDP:"
 
 msgid "Use_rname:"
-msgstr "_Nume utilizator:"
+msgstr "_Nume de utilizator:"
 
 msgid "Pass_word:"
 msgstr "_Parol�:"
@@ -13684,7 +13723,7 @@
 msgstr "Chromium (chrome)"
 
 msgid "Manual"
-msgstr "Manual"
+msgstr "Personalizat"
 
 msgid "Browser Selection"
 msgstr "Navigator preferat"
@@ -13702,23 +13741,23 @@
 msgstr "_Navigator:"
 
 msgid "_Open link in:"
-msgstr "_Deschide adresa:"
+msgstr "_Deschide adresele web:"
 
 msgid "Browser default"
-msgstr "Dup� cum e setat navigatorul"
+msgstr "Respect但nd op�iunile navigatorului"
 
 msgid "Existing window"
-msgstr "�ntr-o fereastr� existent�"
+msgstr "�n ferestre existente"
 
 msgid "New tab"
-msgstr "�ntr-un tab nou"
+msgstr "�n taburi noi"
 
 #, c-format
 msgid ""
 "_Manual:\n"
 "(%s for URL)"
 msgstr ""
-"_Manual:\n"
+"_Personalizat:\n"
 "(%s pentru adres�)"
 
 msgid "Proxy Server"
@@ -13748,7 +13787,7 @@
 msgstr "P_ort:"
 
 msgid "User_name:"
-msgstr "_Nume utilizator:"
+msgstr "_Nume de utilizator:"
 
 msgid "Log _format:"
 msgstr "_Formatul 樽nregistr�rilor:"
@@ -13803,7 +13842,7 @@
 "Sound c_ommand:\n"
 "(%s for filename)"
 msgstr ""
-"Comand� de _redare sunet\n"
+"Comand� de _redare audio\n"
 "(%s pentru numele fi�ierului)"
 
 msgid "M_ute sounds"
@@ -13853,7 +13892,7 @@
 msgstr "Utilizeaz� _ultimul status"
 
 msgid "Status to a_pply at startup:"
-msgstr "Status de utilizat la _pornire:"
+msgstr "Status de utili_zat la pornire:"
 
 msgid "Interface"
 msgstr "Interfa��"
@@ -14006,7 +14045,7 @@
 msgstr "Editare iconi�� simbolic�"
 
 msgid "Add Smiley"
-msgstr "Ad�ugare iconi�� simbolic�"
+msgstr "Ad�uga�i o iconi�� simbolic�"
 
 msgid "_Image:"
 msgstr "_Imagine:"
@@ -14016,7 +14055,7 @@
 msgstr "_Textul combina�iei de semne"
 
 msgid "Smiley"
-msgstr "Iconi�� simbolice"
+msgstr "Iconi�� simbolic�"
 
 msgid "Shortcut Text"
 msgstr "Textul combina�iei de semne"
@@ -14078,7 +14117,7 @@
 "use it as the buddy icon for this user."
 msgstr ""
 "Pute�i trimite aceast� imagine printr-un transfer de fi�iere, o pute�i "
-"insera 樽n acest mesaj sau o pute�i seta ca avatar pentru acest contact."
+"insera 樽n acest mesaj sau o pute�i utiliza ca avatar pentru acest contact."
 
 msgid "Set as buddy icon"
 msgstr "Utilizeaz� ca avatar"
@@ -14090,20 +14129,20 @@
 msgstr "Insereaz� 樽n mesaj"
 
 msgid "Would you like to set it as the buddy icon for this user?"
-msgstr "Dori�i s� o seta�i ca avatar pentru acest contact?"
+msgstr "Dori�i s� o utiliza�i ca avatar pentru acest contact?"
 
 msgid ""
 "You can send this image as a file transfer, or use it as the buddy icon for "
 "this user."
 msgstr ""
 "Pute�i trimite aceast� imagine printr-un transfer de fi�iere sau o pute�i "
-"seta ca avatar pentru acest contact."
+"utiliza ca avatar pentru acest contact."
 
 msgid ""
 "You can insert this image into this message, or use it as the buddy icon for "
 "this user"
 msgstr ""
-"Pute�i insera imaginea 樽n acest mesaj sau o pute�i seta ca avatar pentru "
+"Pute�i insera imaginea 樽n acest mesaj sau o pute�i utiliza ca avatar pentru "
 "acest contact."
 
 #. I don't know if we really want to do anything here.  Most of
@@ -14145,7 +14184,7 @@
 msgstr "Nu s-a putut utiliza iconi�a"
 
 msgid "_Open Link"
-msgstr "_Deschide linkul"
+msgstr "_Deschide adresa"
 
 msgid "_Copy Link Location"
 msgstr "_Copiaz� adresa"
@@ -14192,7 +14231,7 @@
 msgstr "_Invit�"
 
 msgid "_Modify..."
-msgstr "_Modific�..."
+msgstr "E_ditare..."
 
 msgid "_Add..."
 msgstr "_Adaug�..."
@@ -14254,7 +14293,7 @@
 #. *< name
 #. *< version
 msgid "Contact Availability Prediction plugin."
-msgstr "Modul pentru disponibilitatea contactelor"
+msgstr "Modul pentru prevederea disponibilit��ii contactelor."
 
 #. *  summary
 msgid "Displays statistical information about your buddies' availability"
@@ -14391,7 +14430,7 @@
 msgstr "Descoperire de servicii"
 
 msgid "_Browse"
-msgstr "_Navigare:"
+msgstr "_Navigare"
 
 msgid "Server does not exist"
 msgstr "Server inexistent"
@@ -14403,7 +14442,7 @@
 msgstr "Descoperire de servicii XMPP"
 
 msgid "Allows browsing and registering services."
-msgstr "Permite navigarea �i 樽nregistrarea serviciilor"
+msgstr "Permite navigarea �i 樽nregistrarea de servicii XMPP."
 
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
@@ -14416,14 +14455,14 @@
 msgstr "Dup� num�rul discu�iilor"
 
 msgid "Conversation Placement"
-msgstr "Plasament discu�ii"
+msgstr "Plasarea discu�iilor"
 
 #. Translators: "New conversations" should match the text in the preferences dialog and "By conversation count" should be the same text used above
 msgid ""
 "Note: The preference for \"New conversations\" must be set to \"By "
 "conversation count\"."
 msgstr ""
-"Not�: Op�iunea pentru ��Noi conversa�ii�� trebuie s� fie ��Dup� num�rul "
+"Not�: Op�iunea pentru ��Noi discu�ii�� trebuie s� fie ��Dup� num�rul "
 "discu�iilor��."
 
 msgid "Number of conversations per window"
@@ -14440,12 +14479,12 @@
 #. *< priority
 #. *< id
 msgid "ExtPlacement"
-msgstr "Ferestre extra"
+msgstr "Plasare extra"
 
 #. *< name
 #. *< version
 msgid "Extra conversation placement options."
-msgstr "Op�iuni de plasare a discu�iilor 樽n plus."
+msgstr "Op�iuni suplimentare de plasare a discu�iilor."
 
 #. *< summary
 #. *  description
@@ -14651,7 +14690,7 @@
 msgstr "Adaug� o c�su�� 樽n lista de contacte care v� anun�� mailurile noi."
 
 msgid "Markerline"
-msgstr "Marcaj mesaje noi"
+msgstr "Marcaj pentru mesaje noi"
 
 msgid "Draw a line to indicate new messages in a conversation."
 msgstr "Marcheaz� cu o linie mesajele noi dintr-o discu�ie."
@@ -14790,7 +14829,7 @@
 #. *< priority
 #. *< id
 msgid "Message Notification"
-msgstr "Notific�ri mesaje"
+msgstr "Notific�ri pentru mesaje"
 
 #. *< name
 #. *< version
@@ -14827,10 +14866,10 @@
 "- Trimite un mesaj contactelor din list� atunci c但nd se autentific�."
 
 msgid "Hyperlink Color"
-msgstr "Culoare adres� web"
+msgstr "Culoarea adresei web"
 
 msgid "Visited Hyperlink Color"
-msgstr "Culoare adres� web vizitat�"
+msgstr "Culoarea adresei web vizitate"
 
 msgid "Highlighted Message Name Color"
 msgstr "Numele culorii pentru eviden�ierea mesajelor"
@@ -14845,13 +14884,13 @@
 msgstr "Introducere text"
 
 msgid "Conversation History"
-msgstr "Istoricul discu�iei"
+msgstr "�nregistr�ri de discu�ii"
 
 msgid "Request Dialog"
-msgstr "Dialog cerere"
+msgstr "Fereastr� de dialog"
 
 msgid "Notify Dialog"
-msgstr "Dialog notificare"
+msgstr "Fereastr� de notificare"
 
 msgid "Select Color"
 msgstr "Alege�i o culoare"
@@ -14865,10 +14904,10 @@
 msgstr "Alege�i un font pentru %s"
 
 msgid "GTK+ Interface Font"
-msgstr "Font interfa�� GTK+"
+msgstr "Fontul interfe�ei GTK+"
 
 msgid "GTK+ Text Shortcut Theme"
-msgstr "Tem� combina�ii de taste GTK+ Text"
+msgstr "Tema de combina�ii de taste GTK+ Text"
 
 msgid "Disable Typing Notification Text"
 msgstr "Dezactiveaz� textul notific�rii la tastare"
@@ -14896,7 +14935,7 @@
 msgstr "Recite�te fi�ierele gtkrc"
 
 msgid "Pidgin GTK+ Theme Control"
-msgstr "Control tem� GTK+ Pidgin"
+msgstr "Modificare a temei GTK+ 樽n Pidgin"
 
 msgid "Provides access to commonly used gtkrc settings."
 msgstr "Permite accesul la cele mai uzuale op�iuni gtkrc."
@@ -14935,7 +14974,7 @@
 #. *< priority
 #. *< id
 msgid "Release Notification"
-msgstr "Notific�ri versiuni noi"
+msgstr "Notific�ri pentru versiuni noi"
 
 #. *< name
 #. *< version
@@ -14965,7 +15004,7 @@
 #. *< name
 #. *< version
 msgid "Conversation Window Send Button."
-msgstr "Buton de trimitere 樽n fereastra de discu�ii"
+msgstr "Buton de trimitere 樽n fereastra de discu�ii."
 
 #. *< summary
 msgid ""
@@ -15019,10 +15058,10 @@
 msgstr "Activeaz� corectarea ultimului cuv但nt la trimitere"
 
 msgid "Text replacement"
-msgstr "Corecturi text"
+msgstr "Corecturi de text"
 
 msgid "Replaces text in outgoing messages according to user-defined rules."
-msgstr "Schimb� mesajele trimise dup� reguli predefinite de utilizator."
+msgstr "Schimb� mesajele trimise dup� reguli predefinite."
 
 msgid "Just logged in"
 msgstr "Tocmai s-a autentificat"
@@ -15080,7 +15119,7 @@
 msgstr "Iconi�e de status"
 
 msgid "Chatroom Emblems"
-msgstr "Embleme de camere de chat"
+msgstr "Embleme ale canalelor de chat"
 
 msgid "Dialog Icons"
 msgstr "Iconi�e de dialog"
@@ -15148,7 +15187,7 @@
 #. *< version
 #. *  summary
 msgid "Display iChat-style timestamps"
-msgstr "Marcaje de timp 樽n stil iChat"
+msgstr "Marcaje de timp 樽n stil iChat."
 
 #. *  description
 msgid "Display iChat-style timestamps every N minutes."
@@ -15192,7 +15231,7 @@
 #. *< priority
 #. *< id
 msgid "Message Timestamp Formats"
-msgstr "Formatare marcaje de timp"
+msgstr "Formatare pentru marcajele de timp"
 
 #. *< name
 #. *< version
@@ -15255,7 +15294,7 @@
 #. *< summary
 msgid "Configure microphone and webcam settings for voice/video calls."
 msgstr ""
-"Schimba�i op�iunile pentru microfon �i camera web pentru apelurile de voce "
+"Personaliza�i op�iunile microfonului �i camerei web pentru apelurile de voce "
 "�i video"
 
 msgid "Opacity:"
@@ -15370,7 +15409,7 @@
 #. *< version
 #. *  summary
 msgid "Send and receive raw XMPP stanzas."
-msgstr "Trimitere �i primire blocuri XMPP brute"
+msgstr "Trimitere �i primire de blocuri XMPP brute"
 
 #. *  description
 msgid "This plugin is useful for debugging XMPP servers or clients."
@@ -15460,7 +15499,7 @@
 
 #. Installer Subsection Text
 msgid "Pidgin Instant Messaging Client (required)"
-msgstr "Client de mesagerie instant (obligatoriu)"
+msgstr "Clientul de mesagerie instant Pidgin (obligatoriu)"
 
 msgid ""
 "Pidgin requires a compatible GTK+ Runtime (which doesn't appear to be "
@@ -15518,18 +15557,3 @@
 
 msgid "You do not have permission to uninstall this application."
 msgstr "Nu ave釘i drepturile de acces necesare dezinstal�rii acestei aplica釘ii."
-
-#~ msgid "Error requesting %s"
-#~ msgstr "Eroare la cererea %s"
-
-#~ msgid "An error occurred on the in-band bytestream transfer\n"
-#~ msgstr "A ap�rut o eroare la transferul de octe�i 樽n-band�\n"
-
-#~ msgid "Transfer was closed."
-#~ msgstr "Transferul a fost 樽nchis"
-
-#~ msgid "Failed to open in-band bytestream"
-#~ msgstr "Nu s-a putut deschide fluxul de octe�i 樽n-band�"
-
-#~ msgid "Set your friendly name."
-#~ msgstr "Alege�i-v� un pseudonim propriu."
--- a/po/ru.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/ru.po	Sun Mar 13 18:14:04 2011 +0000
@@ -3,14 +3,14 @@
 # Sergey Volozhanin <svo@asplinux.ru>, 2001.
 # Alexandre Prokoudine <avp@altlinux.ru>, 2003, 2004.
 # Dmitry Beloglazov <dmaa@users.sf.net>, 2004-2008.
-# �仆�仂仆 弌舒仄仂�于舒仍仂于 <samant.ua@mail.ru>, 2008-2010.
+# �仆�仂仆 弌舒仄仂�于舒仍仂于 <samant.ua@mail.ru>, 2008-2011.
 #
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
+"POT-Creation-Date: 2011-02-02 23:34-0500\n"
 "PO-Revision-Date: 2008-05-14 15:00+0400\n"
 "Last-Translator: �仆�仂仆 弌舒仄仂�于舒仍仂于 <samant.ua@mail.ru>\n"
 "Language-Team: \n"
@@ -1277,9 +1277,8 @@
 msgid "Someone says your username in chat"
 msgstr "��仂-�仂 仗�仂亳亰仆仂�亳� 于舒�亠 亳仄� 仗仂仍�亰仂于舒�亠仍� 于 �舒�亠"
 
-#, fuzzy
 msgid "Attention received"
-msgstr "丐�亠弍�亠��� 舒从�亳于舒�亳�"
+msgstr "�仂仍��亠仆仂 于仆亳仄舒仆亳亠"
 
 msgid "GStreamer Failure"
 msgstr "��亳弍从舒 GStreamer"
@@ -1566,10 +1565,10 @@
 msgid "TinyURL plugin"
 msgstr "�仂亟�仍� TinyURL"
 
-#, fuzzy
 msgid "When receiving a message with URL(s), use TinyURL for easier copying"
 msgstr ""
-"��亳 仗仂仍��亠仆亳亳 �仂仂弍�亠仆亳� � 舒亟�亠�舒仄亳 URL, TinyURL 亟仍� 仂弍仍亠亞��仆仆仂亞仂 从仂仗亳�仂于舒仆亳�"
+"��亳 仗仂仍��亠仆亳亳 �仂仂弍�亠仆亳� � 舒亟�亠�舒仄亳 URL, 亳�仗仂仍�亰仂于舒�� TinyURL 亟仍� 仂弍仍亠亞�亠仆亳� "
+"从仂仗亳�仂于舒仆亳�"
 
 msgid "Online"
 msgstr "� �亠�亳"
@@ -1667,13 +1666,11 @@
 msgid "Set User Info"
 msgstr "丕��舒仆仂于亳�� 仗仂仍�亰仂于舒�亠仍��从�� 亳仆�仂�仄舒�亳�"
 
-#, fuzzy
 msgid "This protocol does not support setting a public alias."
-msgstr "亅�仂� 仗�仂�仂从仂仍 仆亠 仗仂亟亟亠�亢亳于舒亠� �舒��."
-
-#, fuzzy
+msgstr "亅�仂� 仗�仂�仂从仂仍 仆亠 仗仂亟亟亠�亢亳于舒亠� ���舒仆仂于从� 仂弍�亠亞仂 亟仂仄亠仆仆仂亞仂 亳仄亠仆亳."
+
 msgid "This protocol does not support fetching the public alias."
-msgstr "亅�仂� 仗�仂�仂从仂仍 仆亠 仗仂亟亟亠�亢亳于舒亠� �舒��."
+msgstr "亅�仂� 仗�仂�仂从仂仍 仆亠 仗仂亟亟亠�亢亳于舒亠� 仗仂仍��亠仆亳亠 仂弍�亠亞仂 亟仂仄亠仆仆仂亞仂 亳仄亠仆亳."
 
 msgid "Unknown"
 msgstr "�亠亳亰于亠��仆仂"
@@ -1702,13 +1699,12 @@
 "弌亠��亳�亳从舒� 亠�� 仆亠 仗仂亟�于亠�亢亟�仆.  ��仂于亠���亠 仗�舒于亳仍�仆仂��� 亟舒�� 亳 于�亠仄亠仆亳 仆舒 "
 "于舒�亠仄 从仂仄仗���亠�亠."
 
-#, fuzzy
 msgid ""
 "The certificate has expired and should not be considered valid.  Check that "
 "your computer's date and time are accurate."
 msgstr ""
-"弌亠��亳�亳从舒� 亠�� 仆亠 仗仂亟�于亠�亢亟�仆.  ��仂于亠���亠 仗�舒于亳仍�仆仂��� 亟舒�� 亳 于�亠仄亠仆亳 仆舒 "
-"于舒�亠仄 从仂仄仗���亠�亠."
+"弌�仂从 �亠��亳�亳从舒�舒 亳���从 亳 亠亞仂 弍仂仍��亠 仆亠仍�亰� ��亳�舒�� 亟亠亶��于亳�亠仍�仆�仄.  "
+"��仂于亠���亠 仗�舒于亳仍�仆仂��� 于�亠仄亠仆亳 亳 亟舒�� 仆舒 于舒�亠仄 从仂仄仗���亠�亠."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
 msgid "The certificate presented is not issued to this domain."
@@ -2361,8 +2357,11 @@
 "弌仂��舒仆��� �舒亶仍� 于\n"
 "(�从舒亢亳�亠 仗仂仍仆�亶 仗���)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "��于亠�亞舒�� 舒于�仂仄舒�亳�亠�从亳 仂� 仗仂仍�亰仂于舒�亠仍亠亶 仆亠 亳亰 �仗亳�从舒 �仂弍亠�亠亟仆亳从仂于"
+#, fuzzy
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr "��亳 仗仂���仗仍亠仆亳亳 亰舒仗�仂�舒 仗亠�亠亟舒�亳 �舒亶仍仂于 仂� %s"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2375,6 +2374,10 @@
 msgid "Create a new directory for each user"
 msgstr "弌仂亰亟舒亶�亠 亟仍� 从舒亢亟仂亞仂 仗仂仍�亰仂于舒�亠仍� 仆仂于�� 仗舒仗从�"
 
+#, fuzzy
+msgid "Escape the filenames"
+msgstr "%s 仂�仄亠仆亳仍 仗亠�亠亟舒�� �舒亶仍舒"
+
 msgid "Notes"
 msgstr "�舒仄亠�从亳"
 
@@ -3838,7 +3841,10 @@
 msgstr ""
 "弌亠�于亠� ��亠弍�亠� 舒��亠仆�亳�亳从舒�亳� 仗�仂���仄 �亠从��仂仄 �亠�亠亰 仆亠�亳��仂于舒仆仆�亶 仗仂�仂从"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "�亠于亠�仆�亶 仂�从仍亳从 仂� �亠�于亠�舒"
 
@@ -3900,21 +3906,20 @@
 "The server does support channel binding, but did not appear to advertise "
 "it.  This indicates a likely MITM attack"
 msgstr ""
-
-#, fuzzy
+"亅�仂� �亠�于亠� 仆亠 仗仂亟亟亠�亢亳于舒亠� 仗�亳于�亰从� 从舒仆舒仍舒, 仆仂 仆亠 于�亞仍�亟亳� 亠亞仂 �亠从仍舒仄仂亶. "
+"亅�仂 亞仂于仂�亳� 仂 于仂亰仄仂亢仆仂亶 MITM 舒�舒从亠"
+
 msgid "Server does not support channel binding"
-msgstr "弌亠�于亠� 仆亠 仗仂亟亟亠�亢亳于舒亠� 弍仍仂从亳�仂于从�"
-
-#, fuzzy
+msgstr "弌亠�于亠� 仆亠 仗仂亟亟亠�亢亳于舒亠� 仗�亳于�亰从� 从舒仆舒仍舒"
+
 msgid "Unsupported channel binding method"
-msgstr "�亠仗仂亟亟亠�亢亳于舒亠仄舒� 从仂亟亳�仂于从舒"
+msgstr "�亠仗仂亟亟亠�亢亳于舒亠仄�亶 仄亠�仂亟 仗�亳于�亰从亳 从舒仆舒仍舒"
 
 msgid "User not found"
 msgstr "�仂仍�亰仂于舒�亠仍� 仆亠 仆舒亶亟亠仆"
 
-#, fuzzy
 msgid "Invalid Username Encoding"
-msgstr "�亠于亠�仆仂亠 亳仄� 仗仂仍�亰仂于舒�亠仍�"
+msgstr "�亠于亠�仆舒� 从仂亟亳�仂于从舒 亳仄� 仗仂仍�亰仂于舒�亠仍�"
 
 msgid "Resource Constraint"
 msgstr "�亠亟仂��舒�仂从 �亠����仂于"
@@ -4367,15 +4372,13 @@
 msgstr "丐亠从�� 仆舒���仂亠仆亳�"
 
 msgid "Allow Buzz"
-msgstr "�舒亰�亠�亳�� �仗仍亠�仆亳"
-
-#, fuzzy
+msgstr "�舒亰�亠�亳�� 仂从仍亳从亳"
+
 msgid "Mood Name"
-msgstr "���亠��于仂"
-
-#, fuzzy
+msgstr "�仄� 仆舒���仂亠仆亳�"
+
 msgid "Mood Comment"
-msgstr "�仂仄仄亠仆�舒�亳亶 �仂弍亠�亠亟仆亳从舒"
+msgstr "�仂仄仄亠仆�舒�亳亶 仆舒���仂亠仆亳�"
 
 #. primitive
 #. ID
@@ -4631,7 +4634,7 @@
 
 #, c-format
 msgid "%s has buzzed you!"
-msgstr "%s 仗仂亰于舒仍 于舒�!"
+msgstr "%s 仂从仍亳从仆�仍 于舒�!"
 
 #, c-format
 msgid "Buzzing %s..."
@@ -4645,19 +4648,18 @@
 msgid "Unable to initiate media with %s: user is not online"
 msgstr "�弍仄亠仆 �舒亶仍舒仄亳 � %s 仆亠 �亟舒����: 仗仂仍�亰仂于舒�亠仍� 仆亠 于 �亠�亳"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
-msgstr ""
-"�弍仄亠仆 �舒亶仍舒仄亳 � %s 仆亠 �亟舒����: 仆亠� 仗仂亟仗亳�从亳 仆舒 仗�亳�����于亳亠 仗仂仍�亰仂于舒�亠仍�"
+msgstr "�弍仄亠仆 �舒亶仍舒仄亳 � %s 仆亠 �亟舒仍��: 仆亠� 仗仂亟仗亳�从亳 仆舒 仗�亳�����于亳亠 仗仂仍�亰仂于舒�亠仍�"
 
 msgid "Media Initiation Failed"
 msgstr "�弍仄亠仆 �舒亶仍舒仄亳 仆亠 �亟舒仍��"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
-msgstr "��弍亠�亳�亠 �亠���� %s, 从仂�仂�仂仄� 于� �仂�亠仍亳 弍� 仂�仗�舒于亳�� �舒亶仍"
+msgstr "��弍亠�亳�亠 �亠���� %s, � 从仂�仂��仄 于� �仂�亠仍亳 弍� 仆舒�舒�� 仂弍仄亠仆 �舒亶仍舒仄亳"
 
 msgid "Select a Resource"
 msgstr "��弍�舒�� �亠����"
@@ -4723,11 +4725,10 @@
 msgstr "仗�仂亰于仂仆 &lt;jid&gt;:\t��仂亰于仂仆亳�� 仗仂仍�亰仂于舒�亠仍�/从仂仄仗仂仆亠仆�/�亠�于亠�."
 
 msgid "buzz: Buzz a user to get their attention"
-msgstr "���仗: 仂从仍亳从仆��� 仗仂仍�亰仂于舒�亠仍�, ��仂弍� 仗�亳于仍亠�� 亠亞仂 于仆亳仄舒仆亳亠"
-
-#, fuzzy
+msgstr "仂从仍亳从: 仂从仍亳从仆��� 仗仂仍�亰仂于舒�亠仍�, ��仂弍� 仗�亳于仍亠�� 亠亞仂 于仆亳仄舒仆亳亠"
+
 msgid "mood: Set current user mood"
-msgstr "��弍亠�亳�亠 从仂��亠从�仆仂亞仂 仗仂仍�亰仂于舒�亠仍�"
+msgstr "仆舒���仂亠仆亳亠: 丕��舒仆仂于亳�亠 �亠从��亠亠 仆舒���仂亠仆亳亠 仗仂仍�亰仂于舒�亠仍�"
 
 msgid "Extended Away"
 msgstr "�舒��亳�亠仆仆�亶 \"��仂��仍\""
@@ -4749,20 +4750,17 @@
 msgid "Domain"
 msgstr "�仂仄亠仆"
 
-#, fuzzy
 msgid "Require encryption"
-msgstr "丐�亠弍仂于舒�� 舒于�仂�亳亰舒�亳�"
-
-#, fuzzy
+msgstr "丐�亠弍仂于舒�� �亳��仂于舒仆亳亠"
+
 msgid "Use encryption if available"
-msgstr "�仂仍�亰仂于舒�亠仍��从舒� 亳仆�仂�仄舒�亳� 亟仍� %s 仆亠亟仂���仗仆舒"
+msgstr "��仍亳 亟仂���仗仆仂, 亳�仗仂仍�亰仂于舒�� �亳��仂于舒仆亳亠"
 
 msgid "Use old-style SSL"
-msgstr ""
-
-#, fuzzy
+msgstr "��仗仂仍�亰仂于舒�� SSL ��舒�仂亞仂 仂弍�舒亰�舒"
+
 msgid "Connection security"
-msgstr "弌弍�仂� �仂亠亟亳仆亠仆亳�"
+msgstr "�亠亰仂仗舒�仆仂��� �仂亠亟亳仆亠仆亳�"
 
 msgid "Allow plaintext auth over unencrypted streams"
 msgstr "�舒亰�亠�亳�� 亳亟亠仆�亳�亳从舒�亳� 仗�仂���仄 �亠从��仂仄 �亠�亠亰 仆亠�亳��仂于舒仆仆�亠 仗仂�仂从亳"
@@ -4892,31 +4890,26 @@
 msgid "Please select the resource of %s to which you would like to send a file"
 msgstr "��弍亠�亳�亠 �亠���� %s, 从仂�仂�仂仄� 于� �仂�亠仍亳 弍� 仂�仗�舒于亳�� �舒亶仍"
 
-#, fuzzy
 msgid "Afraid"
-msgstr "��舒弍�从亳亶"
-
-#, fuzzy
+msgstr "�仂�亰仍亳于�亶"
+
 msgid "Amazed"
-msgstr "弌��亟��亳亶��"
-
-#, fuzzy
+msgstr "�亰�仄仍�仆仆�亶"
+
 msgid "Amorous"
-msgstr "�亠仍亳从仂仍亠仗仆�亶"
+msgstr "�仍�弍�亳于�亶"
 
 msgid "Angry"
 msgstr "�舒��亠�亢亠仆仆�亶"
 
-#, fuzzy
 msgid "Annoyed"
-msgstr "�亰亞仆舒仆"
+msgstr "�舒亰亟�舒亢�仆仆�亶"
 
 msgid "Anxious"
 msgstr "�亰舒弍仂�亠仆仆�亶"
 
-#, fuzzy
 msgid "Aroused"
-msgstr "�� 仂�仗�舒于仍�亠�亠"
+msgstr "�仂亰弍�亢亟�仆仆�亶"
 
 msgid "Ashamed"
 msgstr "弌��亟��亳亶��"
@@ -4924,82 +4917,65 @@
 msgid "Bored"
 msgstr "弌从��舒��亳亶"
 
-#, fuzzy
 msgid "Brave"
-msgstr "弌仂��舒仆亳��"
-
-#, fuzzy
+msgstr "丱�舒弍��亶"
+
 msgid "Calm"
-msgstr "弌�亠�舒"
-
-#, fuzzy
+msgstr "丐亳�亳亶"
+
 msgid "Cautious"
-msgstr "丼舒��"
-
-#, fuzzy
+msgstr "���仂�仂亢仆�亶"
+
 msgid "Cold"
-msgstr "�亳�仆�亶"
-
-#, fuzzy
+msgstr "丱仂仍仂亟仆�亶"
+
 msgid "Confident"
-msgstr "�仂仆�仍亳从�"
-
-#, fuzzy
+msgstr "丕于亠�亠仆仆�亶"
+
 msgid "Confused"
-msgstr "��仂亟仂仍亢亳��"
-
-#, fuzzy
+msgstr "�弍亠�从��舒亢亠仆仆�亶"
+
 msgid "Contemplative"
-msgstr "�仂仆�舒从�"
-
-#, fuzzy
+msgstr "�舒亟�仄�亳于�亶"
+
 msgid "Contented"
-msgstr "弌仂亠亟亳仆亠仆亳亠 ���舒仆仂于仍亠仆仂"
-
-#, fuzzy
+msgstr "�仂于仂仍�仆�亶"
+
 msgid "Cranky"
-msgstr "�仂仄仗舒仆亳�"
+msgstr "�舒仗�亳亰仆�亶"
 
 msgid "Crazy"
-msgstr ""
-
-#, fuzzy
+msgstr "弌�仄舒��亠亟�亳亶"
+
 msgid "Creative"
-msgstr "弌仂亰亟舒��"
-
-#, fuzzy
+msgstr "丐于仂��亠�从亳亶"
+
 msgid "Curious"
-msgstr "�亠仍亳从仂仍亠仗仆�亶"
-
-#, fuzzy
+msgstr "��弍仂仗��仆�亶"
+
 msgid "Dejected"
-msgstr "��从仍仂仆亠仆仂"
-
-#, fuzzy
+msgstr "丕亟����仆仆�亶"
+
 msgid "Depressed"
-msgstr "丕亟舒仍亠仆仂"
-
-#, fuzzy
+msgstr "�仂亟舒于仍亠仆仆�亶"
+
 msgid "Disappointed"
-msgstr "弌仂亠亟亳仆亠仆亳亠 �舒亰仂�于舒仆仂."
+msgstr "�舒亰仂�舒�仂于舒仆仆�亶"
 
 msgid "Disgusted"
-msgstr ""
-
-#, fuzzy
+msgstr "��于�舒�舒��亳亶"
+
 msgid "Dismayed"
-msgstr "��从仍��亠仆仂"
-
-#, fuzzy
+msgstr "����亠于仂亢亠仆仆�亶"
+
 msgid "Distracted"
-msgstr "�亠亰舒于亳�亳仄�亶"
+msgstr "�舒��亠�仆仆�亶"
 
 msgid "Embarrassed"
-msgstr ""
-
-#, fuzzy
+msgstr "弌�亠�仆亳�亠仍�仆�亶"
+
 msgid "Envious"
-msgstr "�亰舒弍仂�亠仆仆�亶"
+msgstr "�舒于亳��仍亳于�亶"
 
 msgid "Excited"
 msgstr "�仂亰弍�亢亟�仆仆�亶"
@@ -5469,9 +5445,8 @@
 msgid "Other Locations"
 msgstr "�亠��仂仗仂仍仂亢亠仆亳亠 仗仂仍�亰仂于舒�亠仍�"
 
-#, fuzzy
 msgid "You can sign out from other locations here"
-msgstr "�� �亢亠 仂�从�亟舒-�仂 仗仂亟从仍��亠仆�"
+msgstr "�亟亠�� �� 仄仂亢亠�亠 仂�从仍��亳���� 亳亰 亟��亞亳� 仄亠��"
 
 #. TODO: Due to limitations in our current request field API, the
 #. following string will show up with a trailing colon.  This should
@@ -5479,18 +5454,16 @@
 #. a separate purple_request_field_label_new_without_colon function,
 #. or by never automatically adding the colon and requiring that
 #. callers add the colon themselves.
-#, fuzzy
 msgid "You are not signed in from any other locations."
-msgstr "�� �亢亠 仂�从�亟舒-�仂 仗仂亟从仍��亠仆�"
-
-#, fuzzy
+msgstr "�� 仆亳仂�从�亟舒 仆亠 于仂�仍亳 于 �亠��."
+
 msgid "Allow multiple logins?"
-msgstr "�舒亰�亠�亳�� 仂亟仆仂于�亠仄亠仆仆�亶 于�仂亟 � �舒亰仆�� 仄亠��"
+msgstr "�舒亰�亠�亳�� 仂亟仆仂于�亠仄亠仆仆�亠 于�仂亟� � �舒亰仆�� 仄亠��?"
 
 msgid ""
 "Do you want to allow or disallow connecting from multiple locations "
 "simultaneously?"
-msgstr ""
+msgstr "�� �舒亰�亠�舒亠�亠 仂亟仆仂于�亠仄亠仆仆�亶 于�仂亟 于 �亠�� 亳亰 �舒亰仆�� 仄亠�� 亳仍亳 仆亠�?"
 
 msgid "Allow"
 msgstr "�舒亰�亠�亳��"
@@ -5812,12 +5785,11 @@
 msgid "Show custom smileys"
 msgstr "�仂从舒亰舒�� �于仂亳 �仄舒亶仍亳从亳"
 
-#, fuzzy
 msgid "Allow direct connections"
-msgstr "�亠 �亟舒���� �仂亰亟舒�� �仂亠亟亳仆亠仆亳亠"
+msgstr "�舒亰�亠�亳�� 仗��仄�亠 �仂亠亟亳仆亠仆亳�"
 
 msgid "Allow connecting from multiple locations"
-msgstr ""
+msgstr "�舒亰�亠�亳�� �仂亠亟亳仆亠仆亳� 亳亰 仆亠�从仂仍�从亳� 仄亠��"
 
 msgid "nudge: nudge a user to get their attention"
 msgstr "仗仂亟�舒仍从亳于舒仆亳亠: 仗仂亟�仂仍从仆��� 仗仂仍�亰仂于舒�亠仍�, ��仂弍� 仗�亳于仍亠�� 亠亞仂 于仆亳仄舒仆亳亠"
@@ -5825,13 +5797,11 @@
 msgid "Windows Live ID authentication:Unable to connect"
 msgstr "���亠仆�亳�亳从舒�亳� Windows Live ID: 仆亠 仄仂亞� �仂亠亟亳仆亳����"
 
-#, fuzzy
 msgid "Windows Live ID authentication:Invalid response"
-msgstr "���亠仆�亳�亳从舒�亳� Windows Live ID: 仆亠于亠�仆�亶 仂�于亠�"
-
-#, fuzzy
+msgstr "���亠仆�亳�亳从舒�亳� Windows Live ID:仆亠从仂��亠从�仆�亶 仂�于亠�"
+
 msgid "The following users are missing from your addressbook"
-msgstr "弌仍亠亟���亳亠 仗仂仍�亰仂于舒�亠仍亳 仂������于��� 于 于舒�亠亶 舒亟�亠�仆仂亶 从仆亳亞亠"
+msgstr "弌仍亠亟���亳亠 仗仂仍�亰仂于舒�亠仍亳 亳亰 于舒�亠亶 舒亟�亠�仆仂亶 从仆亳亞亳 仂������于���"
 
 #, c-format
 msgid "Unknown error (%d): %s"
@@ -6043,9 +6013,8 @@
 msgid "The two PINs you entered do not match."
 msgstr "�于舒 于于亠亟�仆仆�� PIN-从仂亟舒 仆亠 �仂于仗舒亟舒��."
 
-#, fuzzy
 msgid "The Display Name you entered is invalid."
-msgstr "�于亠亟�仆仆仂亠 亳仄� 仆亠仗�舒于亳仍�仆仂亠."
+msgstr "�于亠亟�仆仆仂亠 �舒仄亳 亳仄� 仂�仂弍�舒亢亠仆亳� 仆亠从仂��亠从�仆仂."
 
 msgid ""
 "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
@@ -6065,7 +6034,7 @@
 "�仆�仂�仄舒�亳� 仂 于舒�亠仄 仗�仂�亳仍亠 亠�� 仆亠 仗仂仍��亠仆舒. �仂亢舒仍�亶��舒, 仗仂仗�仂弍�亶�亠 仗仂亰亢亠."
 
 msgid "Your UID"
-msgstr ""
+msgstr "�舒� UID"
 
 #. pin
 #. pin (required)
@@ -6128,26 +6097,23 @@
 msgid "Logging In..."
 msgstr "��仂亟亳� 于 �亠��..."
 
-#, fuzzy
 msgid ""
 "Unable to connect to the MXit server. Please check your server settings."
 msgstr ""
-"�亠 �亟舒���� �仂亠亟亳仆亳���� � �亠�于亠�仂仄 MXit. �仂亢舒仍�亶��舒, 仗�仂于亠���亠 于舒�亳 仆舒���仂亶从亳 "
-"�亠�于亠�舒."
+"�亠 �亟舒���� �仂亠亟亳仆亳���� � �亠�于亠�仂仄 MXit. �仂亢舒仍�亶��舒, 仗�仂于亠���亠 仆舒���仂亶从亳 "
+"于舒�亠亞仂 �亠�于亠�舒."
 
 msgid "Connecting..."
 msgstr "弌仂亠亟亳仆亠仆亳亠..."
 
-#, fuzzy
 msgid "The PIN you entered has an invalid length [7-10]."
-msgstr "�于亠亟�仆仆�亶 从仍�� SecurID 仆亠于亠�仆�亶."
+msgstr "�于亠亟�仆仆�亶 �舒仄亳 PIN-从仂亟 仆亠仗�舒于亳仍�仆仂亶 亟仍亳仆� [7-10]."
 
 #. mxit login name
 msgid "MXit ID"
-msgstr ""
+msgstr "MXit ID"
 
 #. show the form to the user to complete
-#, fuzzy
 msgid "Register New MXit Account"
 msgstr "�舒�亠亞亳���亳�仂于舒�� 仆仂于�� ����仆�� 亰舒仗亳�� MXit"
 
@@ -6212,6 +6178,24 @@
 msgid "Retrieving User Information..."
 msgstr "�仂仍��亠仆亳亠 亳仆�仂�仄舒�亳亳 仂 仗仂仍�亰仂于舒�亠仍亠..."
 
+#. you were kicked
+#, fuzzy
+msgid "You have been kicked from this MultiMX."
+msgstr "�舒� 于�亞仆舒仍亳: (%s)"
+
+#, fuzzy
+msgid "was kicked"
+msgstr "�亠于亠�仆�亶 弍亳仍亠�"
+
+#, fuzzy
+msgid "_Room Name:"
+msgstr "_�仂仄仆舒�舒:"
+
+#. Display system message in chat window
+#, fuzzy
+msgid "You have invited"
+msgstr "�舒仄 仗�亳�仍舒 仗仂��舒!"
+
 msgid "Loading menu..."
 msgstr "�舒亞��亰从舒 仄亠仆�..."
 
@@ -6241,24 +6225,6 @@
 msgid "Enable splash-screen popup"
 msgstr "�从仍��亳�� 从仂仆�亠从��仆仂亠 仄亠仆� �从�舒仆舒-亰舒��舒于从亳"
 
-#. you were kicked
-#, fuzzy
-msgid "You have been kicked from this MultiMX."
-msgstr "�舒� 于�亞仆舒仍亳: (%s)"
-
-#, fuzzy
-msgid "was kicked"
-msgstr "�亠于亠�仆�亶 弍亳仍亠�"
-
-#, fuzzy
-msgid "_Room Name:"
-msgstr "_�仂仄仆舒�舒:"
-
-#. Display system message in chat window
-#, fuzzy
-msgid "You have invited"
-msgstr "�舒仄 仗�亳�仍舒 仗仂��舒!"
-
 #, fuzzy
 msgid "Last Online"
 msgstr "� �亠�亳"
@@ -7047,6 +7013,8 @@
 "You required encryption in your account settings, but one of the servers "
 "doesn't support it."
 msgstr ""
+"�� 亰舒仗�仂�亳仍亳 �亳��仂于舒仆亳亠 仆舒���仂亶从舒仄亳 ����仆仂亶 亰舒仗亳�亳, 仆仂 仂亟亳仆 亳亰 �亠�于亠�仂于 亠亞仂 "
+"仆亠 仗仂亟亟亠�亢亳于舒亠�"
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
@@ -7054,9 +7022,8 @@
 msgid "Error requesting %s: %s"
 msgstr "��亳弍从舒 亰舒仗�仂�舒 %s: %s"
 
-#, fuzzy
 msgid "The server returned an empty response"
-msgstr "�亠 �亟舒���� �仂亠亟亳仆亳����: �亠�于亠� 于亠�仆�仍 仗���仂亶 仂�于亠�."
+msgstr "弌亠�于亠� 仂�于亠�亳仍 �亳�亳仆仂亶"
 
 msgid ""
 "Server requested that you fill out a CAPTCHA in order to sign in, but this "
@@ -7365,6 +7332,8 @@
 "You required encryption in your account settings, but encryption is not "
 "supported by your system."
 msgstr ""
+"�� 亰舒仗�仂�亳仍亳 �亳��仂于舒仆亳亠 仆舒���仂亶从舒仄亳 ����仆仂亶 亰舒仗亳�亳, 仆仂 于舒�舒 �亳��亠仄舒 仆亠 "
+"仗仂亟亟亠�亢亳于舒亠� 亠亞仂."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -7973,75 +7942,6 @@
 "�舒��亳仆仂从 IM. �仂�从仂仍�从� 于舒� IP-舒亟�亠� 弍�亟亠� 仂�从���, ��仂 仄仂亢亠� 仗仂于仍亠�� �亞�仂亰� "
 "从仂仆�亳亟亠仆�亳舒仍�仆仂��亳."
 
-msgid "Invalid SNAC"
-msgstr "�亠于亠�仆�亶 SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "��亠于��亠仆 仗�亠亟亠仍 �从仂�仂��亳 �亠�于亠�舒"
-
-msgid "Client rate limit exceeded"
-msgstr "��亠于��亠仆 仗�亠亟亠仍 �从仂�仂��亳 从仍亳亠仆�舒"
-
-msgid "Service unavailable"
-msgstr "弌仍�亢弍舒 仆亠亟仂���仗仆舒"
-
-msgid "Service not defined"
-msgstr "弌仍�亢弍舒 仆亠 仂仗�亠亟亠仍亠仆舒"
-
-msgid "Obsolete SNAC"
-msgstr "丕��舒�亠于�亳亶 SNAC"
-
-msgid "Not supported by host"
-msgstr "�亠 仗仂亟亟亠�亢亳于舒亠��� �亰仍仂仄"
-
-msgid "Not supported by client"
-msgstr "�亠 仗仂亟亟亠�亢亳于舒亠��� 从仍亳亠仆�仂仄"
-
-msgid "Refused by client"
-msgstr "��于亠�亞仆��仂 从仍亳亠仆�仂仄"
-
-msgid "Reply too big"
-msgstr "��于亠� �仍亳�从仂仄 于亠仍亳从"
-
-msgid "Responses lost"
-msgstr "��从仍亳从亳 仗仂�亠��仆�"
-
-msgid "Request denied"
-msgstr "�舒仗�仂� 仂�于亠�亞仆��"
-
-msgid "Busted SNAC payload"
-msgstr "弌仍仂仄舒仆舒 仗仂仍亠亰仆舒� 仆舒亞��亰从舒 SNAC"
-
-msgid "Insufficient rights"
-msgstr "�亠亟仂��舒�仂�仆�亠 仗�舒于舒"
-
-msgid "In local permit/deny"
-msgstr "� 仄亠��仆仂仄 �舒亰�亠�亠仆亳亳/亰舒仗�亠�亠"
-
-msgid "Warning level too high (sender)"
-msgstr "丕�仂于亠仆� 仗�亠亟�仗�亠亢亟亠仆亳� �仍亳�从仂仄 于��仂从 (仂�仗�舒于亳�亠仍�)"
-
-msgid "Warning level too high (receiver)"
-msgstr "丕�仂于亠仆� 仗�亠亟�仗�亠亢亟亠仆亳� �仍亳�从仂仄 于��仂从 (仗仂仍��舒�亠仍�)"
-
-msgid "User temporarily unavailable"
-msgstr "�仂仍�亰仂于舒�亠仍� 于�亠仄亠仆仆仂 仆亠亟仂���仗亠仆"
-
-msgid "No match"
-msgstr "�亠� �仂于仗舒亟亠仆亳�"
-
-msgid "List overflow"
-msgstr "�亠�亠仗仂仍仆亠仆亳亠 �仗亳�从舒"
-
-msgid "Request ambiguous"
-msgstr "�亠��仆�亶 亰舒仗�仂�"
-
-msgid "Queue full"
-msgstr "��亠�亠亟� 仗仂仍仆舒"
-
-msgid "Not while on AOL"
-msgstr "�亠 于 AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "�仆舒�仂从 �仂弍亠�亠亟仆亳从舒"
@@ -8160,58 +8060,122 @@
 msgid "Capabilities"
 msgstr "�仂亰仄仂亢仆仂��亳"
 
+msgid "Invalid SNAC"
+msgstr "�亠于亠�仆�亶 SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "��亠于��亠仆 仗�亠亟亠仍 �从仂�仂��亳 �亠�于亠�舒"
+
+msgid "Client rate limit exceeded"
+msgstr "��亠于��亠仆 仗�亠亟亠仍 �从仂�仂��亳 从仍亳亠仆�舒"
+
+msgid "Service unavailable"
+msgstr "弌仍�亢弍舒 仆亠亟仂���仗仆舒"
+
+msgid "Service not defined"
+msgstr "弌仍�亢弍舒 仆亠 仂仗�亠亟亠仍亠仆舒"
+
+msgid "Obsolete SNAC"
+msgstr "丕��舒�亠于�亳亶 SNAC"
+
+msgid "Not supported by host"
+msgstr "�亠 仗仂亟亟亠�亢亳于舒亠��� �亰仍仂仄"
+
+msgid "Not supported by client"
+msgstr "�亠 仗仂亟亟亠�亢亳于舒亠��� 从仍亳亠仆�仂仄"
+
+msgid "Refused by client"
+msgstr "��于亠�亞仆��仂 从仍亳亠仆�仂仄"
+
+msgid "Reply too big"
+msgstr "��于亠� �仍亳�从仂仄 于亠仍亳从"
+
+msgid "Responses lost"
+msgstr "��从仍亳从亳 仗仂�亠��仆�"
+
+msgid "Request denied"
+msgstr "�舒仗�仂� 仂�于亠�亞仆��"
+
+msgid "Busted SNAC payload"
+msgstr "弌仍仂仄舒仆舒 仗仂仍亠亰仆舒� 仆舒亞��亰从舒 SNAC"
+
+msgid "Insufficient rights"
+msgstr "�亠亟仂��舒�仂�仆�亠 仗�舒于舒"
+
+msgid "In local permit/deny"
+msgstr "� 仄亠��仆仂仄 �舒亰�亠�亠仆亳亳/亰舒仗�亠�亠"
+
+msgid "Warning level too high (sender)"
+msgstr "丕�仂于亠仆� 仗�亠亟�仗�亠亢亟亠仆亳� �仍亳�从仂仄 于��仂从 (仂�仗�舒于亳�亠仍�)"
+
+msgid "Warning level too high (receiver)"
+msgstr "丕�仂于亠仆� 仗�亠亟�仗�亠亢亟亠仆亳� �仍亳�从仂仄 于��仂从 (仗仂仍��舒�亠仍�)"
+
+msgid "User temporarily unavailable"
+msgstr "�仂仍�亰仂于舒�亠仍� 于�亠仄亠仆仆仂 仆亠亟仂���仗亠仆"
+
+msgid "No match"
+msgstr "�亠� �仂于仗舒亟亠仆亳�"
+
+msgid "List overflow"
+msgstr "�亠�亠仗仂仍仆亠仆亳亠 �仗亳�从舒"
+
+msgid "Request ambiguous"
+msgstr "�亠��仆�亶 亰舒仗�仂�"
+
+msgid "Queue full"
+msgstr "��亠�亠亟� 仗仂仍仆舒"
+
+msgid "Not while on AOL"
+msgstr "�亠 于 AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
 msgid "Appear Online"
-msgstr "�仂�于仍�亠��� 于 �亠�亳"
+msgstr "�亳亟亳仄�亶 亟仍� 于�亠�"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user when your status is set to
 #. Invisible (this is the default).
-#, fuzzy
 msgid "Don't Appear Online"
-msgstr "�仂�于仍�亠��� 于 �亠�亳"
+msgstr "�亠于亳亟亳仄�亶 仍亳�� 亟仍� 亳亰弍�舒仆仆��"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to always appear offline to the chosen user (even when your status
 #. isn't Invisible).
 msgid "Appear Offline"
-msgstr "�亠�仂��仆仂 仆亠 于 �亠�亳"
+msgstr "�亠于亳亟亳仄�亶 亟仍� 于�亠�"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user if you are invisible, and
 #. appear online to the chosen user if you are not invisible (this is the
 #. default).
-#, fuzzy
 msgid "Don't Appear Offline"
-msgstr "�亠�仂��仆仂 仆亠 于 �亠�亳"
-
-#, fuzzy
+msgstr "�亠于亳亟亳仄�亶 亟仍� 亳亰弍�舒仆仆��"
+
 msgid "you have no buddies on this list"
-msgstr "�舒� 于�亞仆舒仍亳: (%s)"
-
-#, fuzzy, c-format
+msgstr "于 ��仂仄 �仗亳�从亠 � 于舒� 仆亠� �仂弍亠�亠亟仆亳从仂于"
+
+#, c-format
 msgid ""
 "You can add a buddy to this list by right-clicking on them and selecting \"%s"
 "\""
 msgstr ""
-"�� 仄仂亢亠�亠 亰舒仗�仂�亳�� 舒于�仂�亳亰舒�亳� 仂� ��亳� �仂弍亠�亠亟仆亳从仂于 仗仂于�仂�仆仂, ��仍从仆�于 仆舒 "
-"仆亳� 仗�舒于仂亶 从仆仂仗从仂亶 仄��亳 亳 于�弍�舒于 \"�仂于�仂�仆�亶 亰舒仗�仂� 舒于�仂�亳亰舒�亳亳\"."
-
-#, fuzzy
+"�� 仄仂亢亠�亠 亟仂弍舒于亳�� �仂弍亠�亠亟仆亳从舒 于 ��仂� �仗亳�仂从 仗�舒于�仄 �亠仍�从仂仄 仄��亳, 于�弍�舒于 "
+"亰舒�亠仄 \"%s\""
+
 msgid "Visible List"
-msgstr "�亳亟亳仄�亶"
+msgstr "弌仗亳�仂从 于亳亟亳仄仂��亳"
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
-msgstr ""
-
-#, fuzzy
+msgstr "亅�亳 �仂弍亠�亠亟仆亳从亳 �于亳亟�� 于舒� ��舒��� 仗�亳 仗亠�亠从仍��亠仆亳亳 于 \"�亠于亳亟亳仄�亶\""
+
 msgid "Invisible List"
-msgstr "弌仗亳�仂从 仗�亳亞仍舒��仆仆��"
+msgstr "弌仗亳�仂从 仆亠于亳亟亳仄仂��亳"
 
 msgid "These buddies will always see you as offline"
-msgstr ""
+msgstr "亅�亳 �仂弍亠�亠亟仆亳从亳 仆亳从仂亞亟舒 仆亠 �于亳亟�� 于舒� 于 �亠�亳"
 
 msgid "Aquarius"
 msgstr "�仂亟仂仍亠亶"
@@ -8811,14 +8775,14 @@
 msgid "Select Server"
 msgstr "��弍亠�亳�亠 �亠�于亠�"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "弌仂亠亟亳仆亠仆亳亠 仗仂 TCP"
@@ -11768,9 +11732,8 @@
 msgid "/Tools/Pr_ivacy"
 msgstr "/弌�亠亟��于舒/�_仂仆�亳亟亠仆�亳舒仍�仆仂���"
 
-#, fuzzy
 msgid "/Tools/Set _Mood"
-msgstr "/弌�亠亟��于舒/弌亳��亠仄仆�亶 _亢��仆舒仍"
+msgstr "/弌�亠亟��于舒/丕��舒仆仂于亳�� 仆_舒���仂亠仆亳亠"
 
 msgid "/Tools/_File Transfers"
 msgstr "/弌�亠亟��于舒/�亠�亠亟舒�舒 _�舒亶仍仂于"
@@ -11791,20 +11754,17 @@
 msgid "/Help/Online _Help"
 msgstr "/�仂仄仂��/�仂仄仂�� 于 _�亠�亳"
 
-#, fuzzy
 msgid "/Help/_Build Information"
-msgstr "�仆�仂�仄舒�亳� 仂 �仂弍亠�亠亟仆亳从亠"
+msgstr "/�仂仄仂��/�仆�仂�仄舒�亳� 仂 �_弍仂�从亠"
 
 msgid "/Help/_Debug Window"
 msgstr "/�仂仄仂��/�从仆仂 _仂�仍舒亟从亳"
 
-#, fuzzy
 msgid "/Help/De_veloper Information"
-msgstr "�仆�仂�仄舒�亳� 仂 �亠�于亠�亠"
-
-#, fuzzy
+msgstr "/�仂仄仂��/�仆�仂�仄舒�亳� 仂 �舒亰�舒弍仂�_�亳从亠"
+
 msgid "/Help/_Translator Information"
-msgstr "�亠��仂仆舒仍�仆舒� 亳仆�仂�仄舒�亳�"
+msgstr "/�仂仄仂��/�仆�仂�仄舒�亳� 仂 仗亠�亠于仂_亟�亳从亠"
 
 msgid "/Help/_About"
 msgstr "/�仂仄仂��/� _仗�仂亞�舒仄仄亠"
@@ -12426,9 +12386,6 @@
 msgid "Fatal Error"
 msgstr "�亠亳�仗�舒于亳仄舒� 仂�亳弍从舒"
 
-msgid "bug master"
-msgstr "仄舒��亠� 亞仍�从仂于"
-
 msgid "artist"
 msgstr "亳�仗仂仍仆亳�亠仍�"
 
@@ -12611,6 +12568,10 @@
 msgid "Maithili"
 msgstr "弌�舒�亳仍亳"
 
+#, fuzzy
+msgid "Meadow Mari"
+msgstr "�仂于舒� 仗仂��舒"
+
 msgid "Macedonian"
 msgstr "�舒从亠亟仂仆�从亳亶"
 
@@ -12727,7 +12688,7 @@
 msgid "Lithuanian"
 msgstr "�亳�仂于�从亳亶"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s is a messaging client based on libpurple which is capable of connecting "
 "to multiple messaging services at once.  %s is written in C using GTK+.  %s "
@@ -12736,15 +12697,12 @@
 "copyrighted by its contributors, a list of whom is also distributed with "
 "%s.  There is no warranty for %s.<BR><BR>"
 msgstr ""
-"%s - 亞�舒�亳�亠�从亳亶 仄仂亟�仍�仆�亶 从仍亳亠仆� 仂弍仄亠仆舒 �仂仂弍�亠仆亳�仄亳, 仂�仆仂于�于舒��亳亶�� 仆舒 "
-"弍亳弍仍亳仂�亠从亠 libpurple, 仗仂亰于仂仍���亠亶 亳�仗仂仍�亰仂于舒�� AIM, MSN, Yahoo!, XMPP, ICQ, "
-"IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, "
-"MySpaceIM, Gadu-Gadu 亳 QQ 仂亟仆仂于�亠仄亠仆仆仂.  �舒仗亳�舒仆 � 亳�仗仂仍�亰仂于舒仆亳亠仄 GTK+."
-"<BR><BR>�� 仄仂亢亠�亠 亳亰仄亠仆��� 亳 �舒�仗�仂���舒仆��� 仗�仂亞�舒仄仄� 仗仂 ��仍仂于亳�仄 GPL "
-"(于亠��亳亳 2 亳仍亳 弍仂仍亠亠 仗仂亰亟仆亠亶).  �仂仗亳� GPL �仂亟亠�亢亳��� 于 �舒亶仍亠 'COPYING', "
-"�舒�仗�仂���舒仆�亠仄仂仄 � %s.  �于�仂��从亳亠 仗�舒于舒 仆舒 %s 仗�亳仆舒亟仍亠亢舒� ��舒��仆亳从舒仄 "
-"仗�仂亠从�舒.  �仂仍仆�亶 �仗亳�仂从 ��舒��仆亳从仂于 仗�仂亠从�舒 �仄仂��亳�亠 于 �舒亶仍亠 'COPYRIGHT'.  �� "
-"仆亠 仗�亠亟仂��舒于仍�亠仄 仆亳从舒从亳� 亞舒�舒仆�亳亶 仆舒 ��� 仗�仂亞�舒仄仄�.<BR><BR>"
+"%s - 从仍亳亠仆� 仂弍仄亠仆舒 �仂仂弍�亠仆亳�仄亳, 仂�仆仂于舒仆仆�亶 仆舒 弍亳弍仍亳仂�亠从亠 libpurple, 从仂�仂�舒� "
+"仗仂亰于仂仍�亠� 仂亟仆仂于�亠仄亠仆仆仂 仗仂亟从仍��舒���� 仗仂 仆亠�从仂仍�从亳仄 �仍�亢弍舒仄. %s 仆舒仗亳�舒仆 仆舒 弌 � "
+"亳�仗仂仍�亰仂于舒仆亳亠仄 GTK+. %s 于�仗��亠仆, 亳 仄仂亢亠� 弍��� 亳亰仄亠仆�仆 亳仍亳 仗亠�亠�舒�仗�亠亟亠仍�仆, "
+"仗仂 ��仍仂于亳�仄 GPL 于亠��亳亳 2 (亳仍亳 仗仂亰亟仆亠亶).  �仂仗亳� GPL �舒�仗�仂���舒仆�亠��� 于仄亠��亠 � "
+"%s. ��舒于舒 仆舒 %s 亰舒�亳�亠仆� 亠亞仂 ��舒��仆亳从舒仄亳, �仗亳�仂从 从仂�仂��� �舒从亢亠 "
+"�舒�仗�仂���舒仆�亠��� � %s.  �舒�舒仆�亳� 仆舒 %s 仆亠 仗�亠亟仂��舒于仍�亠���. <BR><BR>"
 
 #, c-format
 msgid ""
@@ -12753,8 +12711,11 @@
 "Channel: #pidgin on irc.freenode.net<BR>\tXMPP MUC: devel@conference.pidgin."
 "im<BR><BR>"
 msgstr ""
-
-#, fuzzy, c-format
+"<FONT SIZE=\"4\"><B>�仂仍亠亰仆�亠 �亠�����</B></FONT><BR>\t<A HREF=\"%s\">�亠弍-"
+"�舒亶�</A><BR>\t<A HREF=\"%s\">丼舒��仂 亰舒亟舒于舒亠仄�亠 于仂仗�仂��</A><BR>\tIRC 从舒仆舒仍: "
+"#pidgin 仆舒 irc.freenode.net<BR>\tXMPP MUC: devel@conference.pidgin.im<BR><BR>"
+
+#, c-format
 msgid ""
 "<font size=\"4\"><b>Help from other Pidgin users</b></font> is available by "
 "e-mailing <a href=\"mailto:support@pidgin.im\">support@pidgin.im</a><br/"
@@ -12764,25 +12725,25 @@
 "welcome to post in another language, but the responses may be less helpful."
 "<br/>"
 msgstr ""
-"<font size=\"4\">�仂仄仂�� 仂� 亟��亞亳� 仗仂仍�亰仂于舒�亠仍亠亶 Pidgin:</font> <a href="
-"\"mailto:support@pidgin.im\">support@pidgin.im</a><br/>亅�仂 <b>仗�弍仍亳�仆舒�</b> "
-"仗仂��仂于舒� �舒���仍从舒! (<a href=\"http://pidgin.im/pipermail/support/\">舒��亳于</"
-"a>)<br/>�� 仆亠 仄仂亢亠仄 仗仂仄仂�� 仗仂 ��仂�仂仆仆亳仄 仗�仂�仂从仂仍舒仄 亳仍亳 仄仂亟�仍�仄!<br/>��仆仂于仆仂亶 "
-"�亰�从 ��仂亶 �舒���仍从亳 - <b>舒仆亞仍亳亶�从亳亶</b>.  ��, 从仂仆亠�仆仂, 仄仂亢亠�亠 仗亳�舒�� 仆舒 "
-"亟��亞仂仄 �亰�从亠, 仆仂 仂�于亠�� 仄仂亞�� 弍��� 仄亠仆亠亠 仗仂仍亠亰仆�仄亳.<br/><br/>"
+"<font size=\"4\"><b>�仂仄仂�� 仂� 亟��亞亳� 仗仂仍�亰仂于舒�亠仍亠亶 Pidgin</b></font> "
+"亟仂���仗仆舒 仗仂 �仍.仗仂��亠 <a href=\"mailto:support@pidgin.im\">support@pidgin.im</"
+"a><br/>亅�仂 <b>仗�弍仍亳�仆舒�</b> 仗仂��仂于舒� �舒���仍从舒! (<a href=\"http://pidgin.im/"
+"pipermail/support/\">舒��亳于</a>)<br/>�� 仆亠 仄仂亢亠仄 仗仂仄仂�� 仗仂 仗�仂�仂从仂仍舒仄 亳仍亳 "
+"仄仂亟�仍�仄 ��亠��亳� 仍亳�!<br/>��仆仂于仆仂亶 �亰�从 ��仂亶 �舒���仍从亳 - <b>舒仆亞仍亳亶�从亳亶</b>.  "
+"��, 从仂仆亠�仆仂, 仄仂亢亠�亠 仗亳�舒�� 仆舒 亟��亞仂仄 �亰�从亠, 仆仂 仂�于亠�� 仄仂亞�� 仂从舒亰舒���� 仄亠仆亠亠 "
+"仗仂仍亠亰仆�仄亳.<br/>"
 
 #, c-format
 msgid "About %s"
 msgstr "� %s"
 
-#, fuzzy
 msgid "Build Information"
-msgstr "�仆�仂�仄舒�亳� 仂 �仂弍亠�亠亟仆亳从亠"
+msgstr "�仆�仂�仄舒�亳� 仂 �弍仂�从亠"
 
 #. End of not to be translated section
-#, fuzzy, c-format
+#, c-format
 msgid "%s Build Information"
-msgstr "�仆�仂�仄舒�亳� 仂 �仂弍亠�亠亟仆亳从亠"
+msgstr "�仆�仂�仄舒�亳� 仂 �弍仂�从亠 %s"
 
 msgid "Current Developers"
 msgstr "丐亠从��亳亠 �舒亰�舒弍仂��亳从亳"
@@ -13210,7 +13171,7 @@
 msgstr "丕仄亠仆��亳�� �舒亰仄亠� ��亳��舒"
 
 msgid "Font Face"
-msgstr "�弍仍亳从 ��亳��舒"
+msgstr "�亳亟 ��亳��舒"
 
 msgid "Foreground Color"
 msgstr "丶于亠� �亠从��舒"
@@ -13224,9 +13185,8 @@
 msgid "Insert Smiley"
 msgstr "���舒于亳�� �仄舒亶仍亳从"
 
-#, fuzzy
 msgid "Send Attention"
-msgstr "�仆仂仗从舒 仂�仗�舒于从亳"
+msgstr "�弍�舒�亳�� 于仆亳仄舒仆亳亠"
 
 msgid "<b>_Bold</b>"
 msgstr "<b>_�亳�仆�亶</b>"
@@ -13253,7 +13213,7 @@
 #. * need to update them when formatting changes. The above items don't need
 #. * no updating nor nothin'
 msgid "_Font face"
-msgstr "_�弍仍亳从 ��亳��舒"
+msgstr "_�亳亟 ��亳��舒"
 
 msgid "Foreground _color"
 msgstr "丶于亠� _�亠从��舒"
@@ -13405,13 +13365,11 @@
 msgid "Exiting because another libpurple client is already running.\n"
 msgstr "���仂亢�, 仗仂�仂仄� ��仂 �亢亠 亰舒仗��亠仆 亟��亞仂亶 从仍亳亠仆� libpurple.\n"
 
-#, fuzzy
 msgid "_Media"
 msgstr "/_�亠亟亳舒"
 
-#, fuzzy
 msgid "_Hangup"
-msgstr "��亳仂��舒仆仂于亳�� �舒亰亞仂于仂�"
+msgstr "_丕亟亠�亢舒�� 亰于仂仆仂从"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
@@ -13471,9 +13429,8 @@
 msgid "Dismiss"
 msgstr "�舒�仗���亳��"
 
-#, fuzzy
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">�舒仄 仗�亳�仍舒 仗仂��舒!</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">�舒 于舒� 仆舒弍�仂�亳仍亳��!</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "弌仍亠亟���亳亠 仄仂亟�仍亳 弍�亟�� 于�亞��亢亠仆�."
@@ -13660,14 +13617,13 @@
 msgstr "��弍仂�� �亠仄"
 
 #. Instructions
-#, fuzzy
 msgid ""
 "Select a theme that you would like to use from the lists below.\n"
 "New themes can be installed by dragging and dropping them onto the theme "
 "list."
 msgstr ""
-"�亰 �仗亳�从舒 仆亳亢亠, 于�弍亠�亳�亠 �亠仄� �仄舒亶仍亳从仂于, 从仂�仂��� 于� 弍� �仂�亠仍亳 亳�仗仂仍�亰仂于舒��.\n"
-" �仂于�亠 �亠仄� 仄仂亢仆仂 ���舒仆仂于亳�� 仗亠�亠�舒�从亳于舒仆亳亠仄 亳� 于 �仗亳�仂从 �亠仄."
+"�亰 �仗亳�从舒 仆亳亢亠 于�弍亠�亳�亠 �亠仄�, 从仂�仂��� 于� �仂�亠仍亳 弍� 亳�仗仂仍�亰仂于舒��.\n"
+"�仂于�亠 �亠仄� 仄仂亢仆仂 ���舒仆仂于亳�� 仗亠�亠�舒�从亳于舒仆亳亠仄 亳� 于 �仗亳�仂从 �亠仄."
 
 msgid "Buddy List Theme:"
 msgstr "丐亠仄舒 弌仗亳�从舒 �仂弍亠�亠亟仆亳从仂于:"
@@ -13817,9 +13773,8 @@
 msgid "_Enable automatic router port forwarding"
 msgstr "_�舒亰�亠�亳�� 舒于�仂仄舒�亳�亠�从�� 仗亠�亠舒亟�亠�舒�亳� 仗仂��仂于 仄舒�����亳亰舒�仂�舒"
 
-#, fuzzy
 msgid "_Manually specify range of ports to listen on:"
-msgstr "丕从舒亰舒�� 亟亳舒仗舒亰仂仆 仗�仂�仍��亳于舒亠仄�� 仗仂��仂于 _于���仆��"
+msgstr "丕从舒亰舒�� 亟亳舒仗舒亰仂仆 仗�仂�仍��亳于舒亠_仄�� 仗仂��仂于 于���仆��:"
 
 msgid "_Start:"
 msgstr "_�舒�舒仍仂:"
@@ -13834,9 +13789,8 @@
 msgid "_TURN server:"
 msgstr "_TURN �亠�于亠�:"
 
-#, fuzzy
 msgid "_UDP Port:"
-msgstr "�_仂��:"
+msgstr "_UDP 仗仂��:"
 
 msgid "Use_rname:"
 msgstr "�仄_� 仗仂仍�亰仂于舒�亠仍�:"
@@ -13860,7 +13814,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13884,11 +13838,11 @@
 
 #. Translators: please do not translate "chromium-browser" here!
 msgid "Chromium (chromium-browser)"
-msgstr ""
+msgstr "Chromium (chromium-browser)"
 
 #. Translators: please do not translate "chrome" here!
 msgid "Chromium (chrome)"
-msgstr ""
+msgstr "Chromium (chrome)"
 
 msgid "Manual"
 msgstr "���亞仂亶"
@@ -13931,7 +13885,6 @@
 msgid "Proxy Server"
 msgstr "��仂从�亳-�亠�于亠�"
 
-#, fuzzy
 msgid "Proxy preferences are configured in GNOME preferences"
 msgstr "�舒���仂亶从亳 仗�仂从�亳 于���舒于仍����� 于 仆舒���仂亶从舒� GNOME"
 
@@ -14236,13 +14189,11 @@
 msgid "Select Buddy Icon"
 msgstr "��弍�舒�� 亳从仂仆从� �仂弍亠�亠亟仆亳从舒"
 
-#, fuzzy
 msgid "Click to change your buddyicon for this account."
-msgstr "乂�仍从仆亳�亠, ��仂弍� 亳亰仄亠仆亳�� �于仂� 亳从仂仆从� 亟仍� ��仂亶 ����仆仂亶 亰舒仗亳�亳."
-
-#, fuzzy
+msgstr "乂�仍从仆亳�亠, ��仂弍� 亳亰仄亠仆亳�� 亳从仂仆从� 亟仍� ��仂亶 ����仆仂亶 亰舒仗亳�亳."
+
 msgid "Click to change your buddyicon for all accounts."
-msgstr "乂�仍从仆亳�亠, ��仂弍� 亳亰仄亠仆亳�� �于仂� 亳从仂仆从� 亟仍� 于�亠� ����仆�� 亰舒仗亳�亠亶."
+msgstr "乂�仍从仆亳�亠, ��仂弍� 亳亰仄亠仆亳�� 亳从仂仆从� 亟仍� 于�亠� ����仆�� 亰舒仗亳�亠亶."
 
 msgid "Waiting for network connection"
 msgstr "�亢亳亟舒仆亳亠 �亠�亠于仂亞仂 �仂亠亟亳仆亠仆亳�"
@@ -14260,7 +14211,7 @@
 msgstr "Google-仂弍�亠仆亳亠"
 
 msgid "Facebook (XMPP)"
-msgstr ""
+msgstr "Facebook (XMPP)"
 
 #, c-format
 msgid "The following error has occurred loading %s: %s"
@@ -14328,13 +14279,12 @@
 msgid "Cannot send launcher"
 msgstr "�亠仍�亰� 仂�仗�舒于亳�� ��仍�从"
 
-#, fuzzy
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
 msgstr ""
-"�� 仗亠�亠��仆�仍亳 从仆仂仗从� 亰舒仗��从舒 �舒弍仂�亠亞仂 ��仂仍舒. 弌从仂�亠亠 于�亠亞仂 于� �仂�亠仍亳 "
-"仂�仗�舒于亳�� �仂, 仆舒 ��仂 ��舒 从仆仂仗从舒 ���仍舒亠���, 舒 仆亠 �舒仄� 亠�."
+"�� 仗亠�亠��仆�仍亳 亰仆舒�仂从 亰舒仗��从舒 � �舒弍仂�亠亞仂 ��仂仍舒. 弌从仂�亠亠 于�亠亞仂 于� �仂�亠仍亳 "
+"仂�仗�舒于亳�� �仂, 仆舒 ��仂 ��仂� 亰仆舒�仂从 ���仍舒亠���, 舒 仆亠 亠亞仂 �舒仄仂亞仂."
 
 #, c-format
 msgid ""
@@ -14357,7 +14307,6 @@
 msgid "Could not set icon"
 msgstr "�亠 �亟舒仍仂�� ���舒仆仂于亳�� 亰仆舒�仂从"
 
-#, fuzzy
 msgid "_Open Link"
 msgstr "_��从���� ���仍从�"
 
@@ -14367,28 +14316,23 @@
 msgid "_Copy Email Address"
 msgstr "_弌从仂仗亳�仂于舒�� 舒亟�亠� email"
 
-#, fuzzy
 msgid "_Open File"
-msgstr "��从���� �舒亶仍..."
-
-#, fuzzy
+msgstr "_��从���� �舒亶仍"
+
 msgid "Open _Containing Directory"
-msgstr "��从���� �仂亟亠�亢舒�亳亶 从舒�舒仍仂亞"
+msgstr "��从���� _�仂亟亠�亢舒��� 仗舒仗从�"
 
 msgid "Save File"
 msgstr "弌仂��舒仆亳�� �舒亶仍"
 
-#, fuzzy
 msgid "_Play Sound"
-msgstr "�仂�仗�仂亳亰于亠��亳 亰于�从"
-
-#, fuzzy
+msgstr "_�仂�仗�仂亳亰于仂亟亳�� 亰于�从"
+
 msgid "_Save File"
-msgstr "弌仂��舒仆亳�� �舒亶仍"
-
-#, fuzzy
+msgstr "_弌仂��舒仆亳�� �舒亶仍"
+
 msgid "Do you really want to clear?"
-msgstr "�� 亟亠亶��于亳�亠仍�仆仂 �仂�亳�亠 �亟舒仍亳�� %s?"
+msgstr "�� 亟亠亶��于亳�亠仍�仆仂 �仂�亳�亠 仂�亳��亳��?"
 
 msgid "Select color"
 msgstr "��弍�舒�� �于亠�"
@@ -14413,7 +14357,6 @@
 msgid "_Modify..."
 msgstr "_�亰仄亠仆亳��..."
 
-#, fuzzy
 msgid "_Add..."
 msgstr "_�仂弍舒于亳��..."
 
@@ -14438,9 +14381,8 @@
 msgid "Small"
 msgstr "�舒仍亠仆�从亳亶"
 
-#, fuzzy
 msgid "Smaller versions of the default smileys"
-msgstr "�亠仆��亳亠 于亠��亳亳 �仄舒亶仍亳从仂于 仗仂 �仄仂仍�舒仆亳�"
+msgstr "丕仄亠仆��亠仆仆�亠 于亠��亳亳 �仄舒亶仍亳从仂于 仗仂 �仄仂仍�舒仆亳�"
 
 msgid "Response Probability:"
 msgstr "�亠�仂��仆仂��� 仂�从仍亳从舒:"
@@ -14628,11 +14570,12 @@
 msgid "Allows browsing and registering services."
 msgstr "�仂亰于仂仍�亠� 仗�仂�仄舒��亳于舒�� 亳 �亠亞亳���亳�仂于舒�� �仍�亢弍�."
 
-#, fuzzy
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
-msgstr "亅�仂� 仄仂亟�仍� 仗仂仍亠亰亠仆 亟仍� 仂�仍舒亟从亳 XMPP �亠�于亠�仂于 亳仍亳 从仍亳亠仆�仂于."
+msgstr ""
+"亅�仂� 仄仂亟�仍� 仗仂仍亠亰亠仆 亟仍� �亠亞亳���舒�亳亳 � 弍舒亰仂于�仄亳 ��舒仆�仗仂��仆�仄亳 亳仍亳 亟��亞亳仄亳 "
+"XMPP �仍�亢弍舒仄亳."
 
 msgid "By conversation count"
 msgstr "�仂 从仂仍亳�亠��于� 弍亠�亠亟"
@@ -14934,14 +14877,13 @@
 msgstr "�仂亟�仍� 仄�亰�从舒仍�仆仂亶 仗亠�亠仗亳�从亳 亟仍� �仂于仄亠��仆仂亞仂 �仂�亳仆亠仆亳�"
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
 msgstr ""
-"�仂亟�仍� 仄�亰�从舒仍�仆仂亶 仗亠�亠仗亳�从亳 仗仂亰于仂仍�亠� 仆亠�从仂仍�从亳仄 仗仂仍�亰仂于舒�亠仍�仄 �仂于仄亠��仆仂 "
-"�舒弍仂�舒�� 仆舒亟 从��仂�从仂仄 仄亠仍仂亟亳亳 仗���仄 �亠亟舒从�亳�仂于舒仆亳� 仂弍�亳� �亠亰�仍��舒�仂于 于 "
-"�亠舒仍�仆仂仄 于�亠仄亠仆亳."
+"�仂亟�仍� 仄�亰�从舒仍�仆仂亶 仗亠�亠仗亳�从亳 仗仂亰于仂仍�亠� 仆亠�从仂仍�从亳仄 仗仂仍�亰仂于舒�亠仍�仄 仂亟仆仂于�亠仄亠仆仆仂 "
+"�舒弍仂�舒�� 仆舒亟 从��仂�从仂仄 仄亠仍仂亟亳亳 仗���仄 �亠亟舒从�亳�仂于舒仆亳� 仂弍�亳� 亟舒仆仆�� 于 �亠舒仍�仆仂仄 "
+"于�亠仄亠仆亳."
 
 #. ---------- "Notify For" ----------
 msgid "Notify For"
@@ -14972,7 +14914,6 @@
 msgid "Set window manager \"_URGENT\" hint"
 msgstr "丕��舒仆仂于亳�� 仗仂亟�从舒亰从� \"弌_��丼��\" 仂从仂仆仆仂亞仂 仄亠仆亠亟亢亠�舒"
 
-#, fuzzy
 msgid "_Flash window"
 msgstr "_�亳亞舒��亠亠 仂从仆仂"
 
@@ -14981,9 +14922,8 @@
 msgstr "_�仂亟仆亳仄舒�� 仂从仆仂 弍亠�亠亟�"
 
 #. Present conversation method button
-#, fuzzy
 msgid "_Present conversation window"
-msgstr "_�仂亟仆亳仄舒�� 仂从仆仂 弍亠�亠亟�"
+msgstr "_�仂从舒亰舒�� 仂从仆仂 弍亠�亠亟�"
 
 #. ---------- "Notification Removals" ----------
 msgid "Notification Removal"
@@ -15058,17 +14998,14 @@
 msgid "Hyperlink Color"
 msgstr "丶于亠� 亞亳仗亠����仍从亳"
 
-#, fuzzy
 msgid "Visited Hyperlink Color"
 msgstr "丶于亠� 仗仂�亠��仆仆仂亶 亞亳仗亠����仍从亳"
 
-#, fuzzy
 msgid "Highlighted Message Name Color"
-msgstr "丶于亠� 仆舒亟仗亳�亳 仗仂亟�于亠�亠仆仆仂亞仂 �仂仂弍�亠仆亳�"
-
-#, fuzzy
+msgstr "丶于亠� 亳仄亠仆亳 仗仂亟�于亠�亠仆仆仂亞仂 �仂仂弍�亠仆亳�"
+
 msgid "Typing Notification Color"
-msgstr "丶于亠� 仆舒弍仂�舒 �于亠亟仂仄仍亠仆亳�"
+msgstr "丶于亠� �于亠亟仂仄仍亠仆亳� 仂 仗亠�舒�舒仆亳亳"
 
 msgid "GtkTreeView Horizontal Separation"
 msgstr "�仂�亳亰仂仆�舒仍�仆仂亠 �舒亰亟亠仍亠仆亳亠 GtkTreeView"
@@ -15076,7 +15013,6 @@
 msgid "Conversation Entry"
 msgstr "�弍仍舒��� 于于仂亟舒 仂从仆舒 弍亠�亠亟�"
 
-#, fuzzy
 msgid "Conversation History"
 msgstr "���仂�亳� 仂弍�亠仆亳�"
 
@@ -15203,7 +15139,6 @@
 msgstr "�仆仂仗从舒 仂�仗�舒于从亳 仂从仆舒 弍亠�亠亟�."
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
@@ -15395,21 +15330,19 @@
 msgid "Timestamp Format Options"
 msgstr "�舒�舒仄亠��� �仂�仄舒�舒 于�亠仄亠仆亳"
 
-#, fuzzy, c-format
+#, c-format
 msgid "_Force timestamp format:"
-msgstr "_��亳仆�亟亳�亠仍�仆仂 亳�仗仂仍�亰仂于舒�� 24-�舒�仂于仂亶 �仂�仄舒� 于�亠仄亠仆亳"
-
-#, fuzzy
+msgstr "_��亳仆�亟亳�亠仍�仆仂 亳�仗仂仍�亰仂于舒�� �仂�仄舒� 于�亠仄亠仆亳:"
+
 msgid "Use system default"
-msgstr "��仗仂仍�亰�亠仄�亶 仗仂 �仄仂仍�舒仆亳�"
-
-#, fuzzy
+msgstr "��仗仂仍�亰仂于舒�� �亳��亠仄仆�亶 仗仂 �仄仂仍�舒仆亳�"
+
 msgid "12 hour time format"
-msgstr "_��亳仆�亟亳�亠仍�仆仂 亳�仗仂仍�亰仂于舒�� 24-�舒�仂于仂亶 �仂�仄舒� 于�亠仄亠仆亳"
+msgstr "12-�舒�仂于仂亶 �仂�仄舒� 于�亠仄亠仆亳"
 
 #, fuzzy
 msgid "24 hour time format"
-msgstr "_��亳仆�亟亳�亠仍�仆仂 亳�仗仂仍�亰仂于舒�� 24-�舒�仂于仂亶 �仂�仄舒� 于�亠仄亠仆亳"
+msgstr "24-�舒�仂于仂亶 �仂�仄舒� 于�亠仄亠仆亳"
 
 msgid "Show dates in..."
 msgstr "�仂从舒亰�于舒�� 亟舒��..."
@@ -15485,9 +15418,8 @@
 msgid "Voice/Video Settings"
 msgstr "�仂仍仂�仂于�亠/�亳亟亠仂 仆舒���仂亶从亳"
 
-#, fuzzy
 msgid "Voice and Video Settings"
-msgstr "�仂仍仂�仂于�亠/�亳亟亠仂 仆舒���仂亶从亳"
+msgstr "�仂仍仂�仂于�亠 亳 于亳亟亠仂 仆舒���仂亶从亳"
 
 #. *< name
 #. *< version
@@ -15757,6 +15689,12 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "丕 �舒� 仆亠� 仗�舒于 仆舒 �亟舒仍亠仆亳亠 ��仂亞仂 仗�亳仍仂亢亠仆亳�."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "��于亠�亞舒�� 舒于�仂仄舒�亳�亠�从亳 仂� 仗仂仍�亰仂于舒�亠仍亠亶 仆亠 亳亰 �仗亳�从舒 �仂弍亠�亠亟仆亳从仂于"
+
+#~ msgid "bug master"
+#~ msgstr "仄舒��亠� 亞仍�从仂于"
+
 #, fuzzy
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "��仂亳亰仂�仍舒 仂�亳弍从舒 仗�亳 仗亠�亠亟舒�亠 于仆���亳仗仂仍仂�仆仂亞仂 仗仂�仂从舒 弍舒亶�\n"
@@ -15879,12 +15817,11 @@
 #~ msgid "Unable to listen on socket: %s"
 #~ msgstr "�亠 �亟舒���� 仗�仂�仍��亳于舒�� �仂从亠�: %s"
 
-#, fuzzy
 #~ msgid "%s just sent you a Nudge!"
 #~ msgstr "%s 仗�仂��仂 仗仂亟�仂仍从仆�仍 于舒�!"
 
 #~ msgid "Friendly name changes too rapidly"
-#~ msgstr "���亢亠��于亠仆仆�亠 亳亰仄亠仆亠仆亳� 亳仄亠仆仆亳 �仍亳�从仂仄 弍�����"
+#~ msgstr "���亢亠��于亠仆仆仂亠 亳仄� 亳亰仄亠仆�亠��� �仍亳�从仂仄 弍����仂"
 
 #~ msgid "This Hotmail account may not be active."
 #~ msgstr "亅�舒 ����仆舒� 亰舒仗亳�� 亞仂���亠亶 仗仂��� 仄仂亢亠� 弍��� 仆亠舒从�亳于仆舒."
@@ -15934,13 +15871,12 @@
 #~ msgid "%s has removed you from his or her buddy list."
 #~ msgstr "%s �亟舒仍亳仍 于舒� 亳亰 �于仂亠亞仂 �仗亳�从舒 �仂弍亠�亠亟仆亳从仂于."
 
-#, fuzzy
 #~ msgid ""
 #~ "The last action you attempted could not be performed because you are over "
 #~ "the rate limit. Please wait 10 seconds and try again.\n"
 #~ msgstr ""
 #~ "�仂�仍亠亟仆亠亠 仗�亠亟仗�亳仆��仂亠 于舒仄亳 亟亠亶��于亳亠 仆亠 仄仂亢亠� 弍��� 于�仗仂仍仆亠仆仂, �舒从 从舒从 于� "
-#~ "仗�亠于��亳仍亳 仗�亠亟亠仍. �仂亟仂亢亟亳�亠 10 �亠从�仆亟 亳 仗仂仗��舒亶�亠�� �仆仂于舒."
+#~ "仗�亠于��亳仍亳 仗�亠亟亠仍 �舒��仂��. �仂亢舒仍�亶��舒, 仗仂仗�仂弍�亶�亠 �仆仂于舒 �亠�亠亰 10 �亠从�仆亟."
 
 #~ msgid ""
 #~ "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
@@ -15949,13 +15885,11 @@
 #~ "<FONT SIZE=\"4\">丼舒�仂:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/"
 #~ "FAQ\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 
-#, fuzzy
 #~ msgid ""
 #~ "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
 #~ msgstr ""
 #~ "<FONT SIZE=\"4\">IRC 从舒仆舒仍:</FONT> #pidgin 仆舒 irc.freenode.net<BR><BR>"
 
-#, fuzzy
 #~ msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
 #~ msgstr ""
 #~ "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
--- a/po/sk.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/sk.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,7 +1,7 @@
 # translation of pidgin.po to Slovak
 # Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the Pidgin package.
-# loptosko <loptosko@gmail.com>, 2007, 2008, 2009, 2010.
+# loptosko <loptosko@gmail.com>, 2007, 2008, 2009, 2010, 2011.
 # Jozef K叩�er <quickparser@gmail.com>, 2007.
 # Ivan Mas叩r <helix84@centrum.sk>, 2007.
 # Pavol Kla�ansk箪 <pavolzetor@gmail.com>, 2008.
@@ -11,8 +11,8 @@
 msgstr ""
 "Project-Id-Version: Pidgin 2.6.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-05-05 19:21+0100\n"
+"POT-Creation-Date: 2011-03-10 02:23-0800\n"
+"PO-Revision-Date: 2011-03-09 11:03+0100\n"
 "Last-Translator: loptosko <loptosko@gmail.com>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "Language: sk\n"
@@ -64,23 +64,22 @@
 msgid "Error"
 msgstr "Chyba"
 
-#, fuzzy
 msgid "Account was not modified"
-msgstr "��et sa nepridal do zoznamu"
+msgstr "��et nebol zmenen箪"
 
 msgid "Account was not added"
-msgstr "��et sa nepridal do zoznamu"
+msgstr "��et nebol pridan箪"
 
 msgid "Username of an account must be non-empty."
 msgstr "Pou転鱈vate直sk辿 meno 炭�tu nesmie by泥 pr叩zdne."
 
 msgid ""
 "The account's protocol cannot be changed while it is connected to the server."
-msgstr ""
+msgstr "Protokol 炭�tu sa ned叩 zmeni泥 po�as prihl叩senia na server."
 
 msgid ""
 "The account's username cannot be changed while it is connected to the server."
-msgstr ""
+msgstr "Prihlasovacie meno 炭�tu sa ned叩 zmeni泥 po�as prihl叩senia na server."
 
 msgid "New mail notifications"
 msgstr "Upozornenia na nov炭 po邸tu"
@@ -1686,13 +1685,14 @@
 msgid ""
 "The certificate is not valid yet.  Check that your computer's date and time "
 "are accurate."
-msgstr ""
-
-#, fuzzy
+msgstr "Certifik叩t e邸te nie je platn箪.  Skontrolujte v叩邸 d叩tum a �as."
+
 msgid ""
 "The certificate has expired and should not be considered valid.  Check that "
 "your computer's date and time are accurate."
-msgstr "Certifik叩t vypr邸al a nie je platn箪."
+msgstr ""
+"Certifik叩t vypr邸al a nie je platn箪. Skontrolujte, �i m叩te spr叩vne nastaven箪 "
+"d叩tum a �as."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
 msgid "The certificate presented is not issued to this domain."
@@ -2332,8 +2332,12 @@
 "Miesto, kam uklada泥 s炭bory\n"
 "(Pros鱈m, zadajte pln炭 cestu)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Automaticky blokova泥 pou転鱈vate直ov mimo m担jho zoznamu kontaktov"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Ke� posiela s炭bor pou転鱈vate直, ktor箪\n"
+"*nie je* na va邸om zozname priate直ov:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2346,6 +2350,9 @@
 msgid "Create a new directory for each user"
 msgstr "Vytvori泥 nov箪 prie�inok pre ka転d辿ho pou転鱈vate直a"
 
+msgid "Escape the filenames"
+msgstr "Escapova泥 n叩zvy s炭borov"
+
 msgid "Notes"
 msgstr "Pozn叩mky"
 
@@ -3183,9 +3190,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Krstn辿 meno"
 
@@ -3796,7 +3801,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "Server vy転aduje textov炭 autentifik叩ciu cez neza邸ifrovan箪 pr炭d"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Chybn叩 odpove� zo servera"
 
@@ -3823,16 +3831,15 @@
 msgid "Server thinks authentication is complete, but client does not"
 msgstr "Server pova転uje autentiz叩ciu za dokon�en炭, ale klient nie"
 
-#, fuzzy
 msgid "Server may require plaintext authentication over an unencrypted stream"
-msgstr "Server vy転aduje textov炭 autentifik叩ciu cez neza邸ifrovan箪 pr炭d"
-
-#, fuzzy, c-format
+msgstr "Server m担転e vy転adova泥 textov炭 autentifik叩ciu cez neza邸ifrovan箪 pr炭d"
+
+#, c-format
 msgid ""
 "%s may require plaintext authentication over an unencrypted connection.  "
 "Allow this and continue authentication?"
 msgstr ""
-"%s vy転aduje plaintextov炭 autentifik叩ciu cez neza邸ifrovan辿 pripojenie.  "
+"%s m担転e vy転adova泥 plaintextov炭 autentifik叩ciu cez neza邸ifrovan辿 pripojenie.  "
 "Chcete ju povoli泥 a pokra�ova泥 v autentifik叩cii?"
 
 msgid "SASL authentication failed"
@@ -3938,7 +3945,6 @@
 msgid "Postal Code"
 msgstr "Po邸tov辿 smerovacie �鱈slo"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Krajina"
 
@@ -4703,20 +4709,17 @@
 msgid "Domain"
 msgstr "Dom辿na"
 
-#, fuzzy
 msgid "Require encryption"
-msgstr "Vy転adova泥 autoriz叩ciu"
-
-#, fuzzy
+msgstr "Vy転adova泥 邸ifrovanie"
+
 msgid "Use encryption if available"
-msgstr "Podrobnosti o pou転鱈vate直ovi %s nie s炭 dostupn辿"
+msgstr "Pou転i泥 邸ifrovanie ak je to mo転n辿"
 
 msgid "Use old-style SSL"
-msgstr ""
-
-#, fuzzy
+msgstr "Pou転i泥 klasick辿 SSL"
+
 msgid "Connection security"
-msgstr "Obnovenie spojenia"
+msgstr "Bezpe�nos泥 pripojenia"
 
 msgid "Allow plaintext auth over unencrypted streams"
 msgstr "Povoli泥 textov炭 autentifik叩ciu cez neza邸ifrovan辿 spojenia"
@@ -5375,28 +5378,23 @@
 msgid "Set friendly name for %s."
 msgstr "Vypl�te priate直sk辿 meno pre %s."
 
-#, fuzzy
 msgid "Set Friendly Name"
-msgstr "Nastavi泥 priate直sk辿 meno..."
+msgstr "Nastavi泥 priate直sk辿 meno"
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr "Toto je n叩zov, pod ktor箪m v叩s bud炭 vidie泥 ostatn鱈 priatelia z MSN."
 
-#, fuzzy
 msgid "This Location"
-msgstr "Lokalita"
-
-#, fuzzy
+msgstr "Toto miesto"
+
 msgid "This is the name that identifies this location"
-msgstr "Toto je n叩zov, pod ktor箪m v叩s bud炭 vidie泥 ostatn鱈 priatelia z MSN."
-
-#, fuzzy
+msgstr "Toto je meno, ktor辿 ur�uje toto miesto"
+
 msgid "Other Locations"
-msgstr "Lokalita"
-
-#, fuzzy
+msgstr "In辿 miesta"
+
 msgid "You can sign out from other locations here"
-msgstr "Prihl叩sili ste sa z in辿ho miesta"
+msgstr "Tu sa m担転ete odhl叩si泥 z in箪ch miest"
 
 #. TODO: Due to limitations in our current request field API, the
 #. following string will show up with a trailing colon.  This should
@@ -5404,24 +5402,22 @@
 #. a separate purple_request_field_label_new_without_colon function,
 #. or by never automatically adding the colon and requiring that
 #. callers add the colon themselves.
-#, fuzzy
 msgid "You are not signed in from any other locations."
-msgstr "Prihl叩sili ste sa z in辿ho miesta"
-
-#, fuzzy
+msgstr "Nie ste prihl叩sen鱈 zo 転iadneho in辿ho miesta."
+
 msgid "Allow multiple logins?"
-msgstr "Umo転ni泥 viacero spusten鱈"
+msgstr "Umo転ni泥 viacn叩sobn辿 prihl叩senia?"
 
 msgid ""
 "Do you want to allow or disallow connecting from multiple locations "
 "simultaneously?"
-msgstr ""
+msgstr "Chcete povoli泥 alebo zak叩za泥 prip叩janie z viacer箪ch miest s炭�astne?"
 
 msgid "Allow"
 msgstr "Povoli泥"
 
 msgid "Disallow"
-msgstr "Nepovoli泥"
+msgstr "Zak叩za泥"
 
 msgid "Set your home phone number."
 msgstr "Vypl�te va邸e telef坦nne �鱈slo domov."
@@ -5502,9 +5498,8 @@
 msgid "Set Friendly Name..."
 msgstr "Nastavi泥 priate直sk辿 meno..."
 
-#, fuzzy
 msgid "View Locations..."
-msgstr "Vyberte umiestnenie..."
+msgstr "Zobrazi泥 miesta..."
 
 msgid "Set Home Phone Number..."
 msgstr "Nastavi泥 �鱈slo telef坦nu domov..."
@@ -5518,9 +5513,8 @@
 msgid "Enable/Disable Mobile Devices..."
 msgstr "Povoli泥/Zak叩za泥 mobiln辿 zariadenia..."
 
-#, fuzzy
 msgid "Allow/Disallow Multiple Logins..."
-msgstr "Povoli泥/Zak叩za泥 mobiln辿 str叩nky..."
+msgstr "Povoli泥/Zak叩za泥 viacn叩sobn辿 prihl叩senia..."
 
 msgid "Allow/Disallow Mobile Pages..."
 msgstr "Povoli泥/Zak叩za泥 mobiln辿 str叩nky..."
@@ -5737,12 +5731,11 @@
 msgid "Show custom smileys"
 msgstr "Zobrazi泥 vlastn箪ch smajl鱈kov"
 
-#, fuzzy
 msgid "Allow direct connections"
-msgstr "Ned叩 sa vytvori泥 spojenie"
+msgstr "Povoli泥 priame pripojenia"
 
 msgid "Allow connecting from multiple locations"
-msgstr ""
+msgstr "Povoli泥 viacn叩sobn辿 prihlasovanie"
 
 msgid "nudge: nudge a user to get their attention"
 msgstr "nudge: postr�te pou転鱈vate直a pre z鱈skanie ich pozornosti"
@@ -5946,9 +5939,8 @@
 msgid "The two PINs you entered do not match."
 msgstr "Dva PINy ktor辿 ste zadali sa nezhoduj炭."
 
-#, fuzzy
 msgid "The Display Name you entered is invalid."
-msgstr "Zadan辿 meno je neplatn辿"
+msgstr "Zadan辿 pou転鱈vate直sk辿 meno je chybn辿."
 
 msgid ""
 "The birthday you entered is invalid. The correct format is: 'YYYY-MM-DD'."
@@ -5967,7 +5959,7 @@
 msgstr "�daje z v叩邸ho profilu nie s炭 na�鱈tan辿. Pros鱈m, sk炭ste to znovu nesk担r."
 
 msgid "Your UID"
-msgstr ""
+msgstr "Va邸e UID"
 
 #. pin
 #. pin (required)
@@ -6039,12 +6031,15 @@
 msgid "Connecting..."
 msgstr "Prip叩ja sa..."
 
+msgid "The Display Name you entered is too short."
+msgstr "Zadan辿 pou転鱈vate直sk辿 meno je pr鱈li邸 kr叩tke."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Zadan箪 PIN m叩 neplatn炭 d頂転ku [7-10]."
 
 #. mxit login name
 msgid "MXit ID"
-msgstr ""
+msgstr "MXit ID"
 
 #. show the form to the user to complete
 msgid "Register New MXit Account"
@@ -6074,14 +6069,11 @@
 msgid "Invalid country selected. Please try again."
 msgstr "Vybran叩 chybn叩 krajina. Pros鱈m, sk炭ste to znovu nesk担r."
 
-#, fuzzy
 msgid "The MXit ID you entered is not registered. Please register first."
-msgstr ""
-"Pou転鱈vate直sk辿 meno nie je registrovan辿. Pros鱈m, najsk担r sa zaregistrujte."
-
-#, fuzzy
+msgstr "Zadan辿 MXit ID nie je registrovan辿. Pros鱈m, najsk担r sa zaregistrujte."
+
 msgid "The MXit ID you entered is already registered. Please choose another."
-msgstr "Pou転鱈vate直sk辿 meno u転 je registrovan辿. Pros鱈m, vyberte si in辿."
+msgstr "Zadan辿 MXit ID u転 je registrovan辿. Pros鱈m, vyberte si in辿."
 
 msgid "Internal error. Please try again later."
 msgstr "Vn炭torn叩 chyba. Pros鱈m, sk炭ste to znovu nesk担r."
@@ -6112,23 +6104,45 @@
 msgid "Retrieving User Information..."
 msgstr "Na�鱈tavaj炭 sa pou転鱈vate直sk辿 inform叩cie..."
 
+#. you were kicked
+msgid "You have been kicked from this MultiMX."
+msgstr "Boli ste vykopnut箪 z tohoto MultiMX."
+
+msgid "was kicked"
+msgstr "bol vykopnut箪"
+
+msgid "_Room Name:"
+msgstr "N叩zov _miestnosti:"
+
+#. Display system message in chat window
+msgid "You have invited"
+msgstr "Pozvali ste"
+
 msgid "Loading menu..."
 msgstr "Na�鱈tava sa ponuka..."
 
 msgid "Status Message"
 msgstr "Spr叩va statusu"
 
-#, fuzzy
 msgid "Rejection Message"
-msgstr "Prijat辿 spr叩vy"
+msgstr "Spr叩va odmietnutia"
 
 #. hidden number
 msgid "Hidden Number"
 msgstr "Skryt辿 �鱈slo"
 
-#, fuzzy
+msgid "No profile available"
+msgstr "Nedostupn箪 profil"
+
+msgid "This contact does not have a profile."
+msgstr "Tento kontakt nem叩 profil."
+
 msgid "Your MXit ID..."
-msgstr "Yahoo ID..."
+msgstr "V叩邸 MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "Znovu pozva泥"
 
 #. Configuration options
 #. WAP server (reference: "libpurple/accountopt.h")
@@ -6141,27 +6155,8 @@
 msgid "Enable splash-screen popup"
 msgstr "Zapn炭泥 炭vodn炭 vyskakovaciu obrazovku"
 
-#. you were kicked
-#, fuzzy
-msgid "You have been kicked from this MultiMX."
-msgstr "Boli ste vykopnut箪: (%s)"
-
-#, fuzzy
-msgid "was kicked"
-msgstr "Nespr叩vny l鱈stok"
-
-#, fuzzy
-msgid "_Room Name:"
-msgstr "_Miestnos泥:"
-
-#. Display system message in chat window
-#, fuzzy
-msgid "You have invited"
-msgstr "M叩te po邸tu!"
-
-#, fuzzy
 msgid "Last Online"
-msgstr "Prihl叩sen箪"
+msgstr "Posledn辿 prihl叩senie"
 
 #. we must have lost the connection, so terminate it so that we can reconnect
 msgid "We have lost the connection to MXit. Please reconnect."
@@ -6925,6 +6920,7 @@
 "You required encryption in your account settings, but one of the servers "
 "doesn't support it."
 msgstr ""
+"V nastaveniach 炭�tov ste zvolili 邸ifrovanie, ale jeden server ho nepodporuje."
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
@@ -6932,9 +6928,8 @@
 msgid "Error requesting %s: %s"
 msgstr "Chyba pri po転adovan鱈 %s: %s"
 
-#, fuzzy
 msgid "The server returned an empty response"
-msgstr "Nepodarilo sa pripoji泥: Server vr叩til pr叩zdnu odpove�."
+msgstr "Server vr叩til pr叩zdnu odpove�"
 
 msgid ""
 "Server requested that you fill out a CAPTCHA in order to sign in, but this "
@@ -7240,6 +7235,7 @@
 "You required encryption in your account settings, but encryption is not "
 "supported by your system."
 msgstr ""
+"V nastaveniach 炭�tov ste zvolili 邸ifrovanie, ale v叩邸 syst辿m ho nepodporuje. "
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -7437,6 +7433,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Boli ste odpojen鱈 z miestnosti %s."
 
+msgid "The new formatting is invalid."
+msgstr "Nov辿 form叩tovanie je chybn辿."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Form叩tovanie pou転鱈vate直sk辿ho mena m担転e meni泥 iba ve直kos泥 znakov alebo "
+"medzery."
+
 msgid "Pop-Up Message"
 msgstr "Vyskakovacia spr叩va"
 
@@ -7712,20 +7716,11 @@
 msgid "ICQ Privacy Options"
 msgstr "Nastavenie s炭kromia ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "Nov辿 form叩tovanie je chybn辿."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Form叩tovanie pou転鱈vate直sk辿ho mena m担転e meni泥 iba ve直kos泥 znakov alebo "
-"medzery."
-
 msgid "Change Address To:"
 msgstr "Zmeni泥 adresu na:"
 
-#, fuzzy
 msgid "you are not waiting for authorization"
-msgstr "<i>ne�ak叩te na autoriz叩ciu</i>"
+msgstr "ne�ak叩te na autoriz叩ciu"
 
 msgid "You are awaiting authorization from the following buddies"
 msgstr "O�ak叩vate autoriz叩ciu od nasleduj炭cich priate直ov"
@@ -7763,13 +7758,11 @@
 msgid "Set Privacy Options..."
 msgstr "Nastavi泥 mo転nosti s炭kromia..."
 
-#, fuzzy
 msgid "Show Visible List"
-msgstr "Zobrazi泥 z_oznam priate直ov"
-
-#, fuzzy
+msgstr "Zobrazi泥 zoznam vidite直n箪ch"
+
 msgid "Show Invisible List"
-msgstr "Zoznam pozvan箪ch"
+msgstr "Zobrazi泥 zoznam nevidite直n箪ch"
 
 #. AIM actions
 msgid "Confirm Account"
@@ -7787,9 +7780,8 @@
 msgid "Search for Buddy by Email Address..."
 msgstr "H直ada泥 priate直a pod直a e-mailovej adresy..."
 
-#, fuzzy
 msgid "Don't use encryption"
-msgstr "Vy転adova泥 autoriz叩ciu"
+msgstr "Nepou転鱈va泥 邸ifrovanie"
 
 msgid "Use clientLogin"
 msgstr "Pou転i泥 clientLogin"
@@ -7829,75 +7821,6 @@
 "prenos obr叩zkov v spr叩vach.  Preto転e pri tom bude odhalen叩 va邸a IP adresa, "
 "m担転e to by泥 hodnoten辿 ako ohrozenie s炭kromia."
 
-msgid "Invalid SNAC"
-msgstr "Chybn辿 SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr ""
-
-msgid "Client rate limit exceeded"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr "Slu転ba nedostupn叩"
-
-msgid "Service not defined"
-msgstr "Slu転ba nebola definovan叩"
-
-msgid "Obsolete SNAC"
-msgstr "Zastaral辿 SNAC"
-
-msgid "Not supported by host"
-msgstr "Nepodporovan辿 hostite直om"
-
-msgid "Not supported by client"
-msgstr "Nepodporovan辿 klientom"
-
-msgid "Refused by client"
-msgstr "Odmietnut辿 klientom"
-
-msgid "Reply too big"
-msgstr "Odpove� je pr鱈li邸 ve直k叩"
-
-msgid "Responses lost"
-msgstr "Odpovede straten辿"
-
-msgid "Request denied"
-msgstr "Po転iadavka zamietnut叩"
-
-msgid "Busted SNAC payload"
-msgstr "Po邸koden辿 SNAC 炭daje"
-
-msgid "Insufficient rights"
-msgstr "Nedostato�n辿 pr叩va"
-
-msgid "In local permit/deny"
-msgstr "V miestne povolen箪ch/zak叩zan箪ch"
-
-msgid "Warning level too high (sender)"
-msgstr "�rove� upozornenia je pr鱈li邸 vysok叩 (odosielate直a)"
-
-msgid "Warning level too high (receiver)"
-msgstr "�rove� upozornenia je pr鱈li邸 vysok叩 (prij鱈mate直a)"
-
-msgid "User temporarily unavailable"
-msgstr "Pou転鱈vate直 je do�asne nedostupn箪"
-
-msgid "No match"
-msgstr "貼iadny v箪skyt"
-
-msgid "List overflow"
-msgstr "Prete�enie zoznamu"
-
-msgid "Request ambiguous"
-msgstr "Nejednozna�n叩 po転iadavka"
-
-msgid "Queue full"
-msgstr "Rad je pln箪"
-
-msgid "Not while on AOL"
-msgstr "Nie, pok箪m ste na AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Ikona priate直a"
@@ -8016,6 +7939,75 @@
 msgid "Capabilities"
 msgstr "Schopnosti"
 
+msgid "Invalid SNAC"
+msgstr "Chybn辿 SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Limit r箪chlosti serveru prekro�en箪"
+
+msgid "Client rate limit exceeded"
+msgstr "Limit r箪chlosti klienta prekro�en箪"
+
+msgid "Service unavailable"
+msgstr "Slu転ba nedostupn叩"
+
+msgid "Service not defined"
+msgstr "Slu転ba nebola definovan叩"
+
+msgid "Obsolete SNAC"
+msgstr "Zastaral辿 SNAC"
+
+msgid "Not supported by host"
+msgstr "Nepodporovan辿 hostite直om"
+
+msgid "Not supported by client"
+msgstr "Nepodporovan辿 klientom"
+
+msgid "Refused by client"
+msgstr "Odmietnut辿 klientom"
+
+msgid "Reply too big"
+msgstr "Odpove� je pr鱈li邸 ve直k叩"
+
+msgid "Responses lost"
+msgstr "Odpovede straten辿"
+
+msgid "Request denied"
+msgstr "Po転iadavka zamietnut叩"
+
+msgid "Busted SNAC payload"
+msgstr "Po邸koden辿 SNAC 炭daje"
+
+msgid "Insufficient rights"
+msgstr "Nedostato�n辿 pr叩va"
+
+msgid "In local permit/deny"
+msgstr "V miestne povolen箪ch/zak叩zan箪ch"
+
+msgid "Warning level too high (sender)"
+msgstr "�rove� upozornenia je pr鱈li邸 vysok叩 (odosielate直a)"
+
+msgid "Warning level too high (receiver)"
+msgstr "�rove� upozornenia je pr鱈li邸 vysok叩 (prij鱈mate直a)"
+
+msgid "User temporarily unavailable"
+msgstr "Pou転鱈vate直 je do�asne nedostupn箪"
+
+msgid "No match"
+msgstr "貼iadny v箪skyt"
+
+msgid "List overflow"
+msgstr "Prete�enie zoznamu"
+
+msgid "Request ambiguous"
+msgstr "Nejednozna�n叩 po転iadavka"
+
+msgid "Queue full"
+msgstr "Rad je pln箪"
+
+msgid "Not while on AOL"
+msgstr "Nie, pok箪m ste na AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8025,9 +8017,8 @@
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user when your status is set to
 #. Invisible (this is the default).
-#, fuzzy
 msgid "Don't Appear Online"
-msgstr "Vyzera泥 prihl叩sen箪"
+msgstr "Nevyzera泥 prihl叩sen箪"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to always appear offline to the chosen user (even when your status
@@ -8039,35 +8030,29 @@
 #. you to appear offline to the chosen user if you are invisible, and
 #. appear online to the chosen user if you are not invisible (this is the
 #. default).
-#, fuzzy
 msgid "Don't Appear Offline"
-msgstr "Vyzera泥 odhl叩sen箪"
-
-#, fuzzy
+msgstr "Nevyzera泥 odhl叩sen箪"
+
 msgid "you have no buddies on this list"
-msgstr "Boli ste vykopnut箪: (%s)"
-
-#, fuzzy, c-format
+msgstr "Na tomto zozname nem叩te priate直ov"
+
+#, c-format
 msgid ""
 "You can add a buddy to this list by right-clicking on them and selecting \"%s"
 "\""
-msgstr ""
-"T箪chto priate直ov m担転ete znovu po転iada泥 o autoriz叩ciu, ke� na nich kliknete "
-"prav箪m tla�idlom a vyberiete mo転nos泥 ��Znovu po転iada泥 o autoriz叩ciu��."
-
-#, fuzzy
+msgstr "Priate直a do zoznamu m担転ete prida泥 prav箪m kliknut鱈m a mo転nos泥ou \"%s\""
+
 msgid "Visible List"
-msgstr "Vidite直n箪"
+msgstr "Zoznam vidite直nosti"
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
-msgstr ""
-
-#, fuzzy
+msgstr "T鱈to priatelia uvidia v叩邸 stav ak ste \"Nevidite直n箪\""
+
 msgid "Invisible List"
-msgstr "Zoznam pozvan箪ch"
+msgstr "Zoznam nevidite直nosti"
 
 msgid "These buddies will always see you as offline"
-msgstr ""
+msgstr "T鱈to priatelia v叩s v転dy uvidia odhl叩sen箪ch."
 
 msgid "Aquarius"
 msgstr "Vodn叩r"
@@ -8247,9 +8232,9 @@
 msgid "Your request was rejected."
 msgstr "Va邸a po転iadavka bola zamietnut叩."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requires verification: %s"
-msgstr "%u vy転aduje overenie"
+msgstr "%u vy転aduje overenie: %s"
 
 msgid "Add buddy question"
 msgstr "Prida泥 ot叩zku priate直a"
@@ -8612,14 +8597,14 @@
 msgid "Select Server"
 msgstr "Vyberte server"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Pripoji泥 sa pomocou TCP"
@@ -8633,6 +8618,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Pri prijat鱈 spr叩vy zobrazi泥 miestnos泥"
 
+msgid "Use default font"
+msgstr "Pou転i泥 邸tandardn辿 p鱈smo"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Interval udr転iavania spojenia (sek炭nd)"
 
@@ -10268,9 +10256,8 @@
 msgid "Ignore conference and chatroom invitations"
 msgstr "Ignorova泥 pozv叩nky na konferencie a chatovacie miestnosti"
 
-#, fuzzy
 msgid "Use account proxy for HTTP and HTTPS connections"
-msgstr "Pou転鱈va泥 proxy 炭�tu pre SSL pripojenia"
+msgstr "Pou転鱈va泥 proxy 炭�tu pre HTTP a HTTPS pripojenia"
 
 msgid "Chat room list URL"
 msgstr "URL zoznamu miestnost鱈 chatu"
@@ -11180,11 +11167,10 @@
 "toto okno otvor鱈te v ponuke <b>��ty->Spravova泥 炭�ty</b> v okne Zoznam "
 "priate直ov"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"
 msgstr ""
-"%s%s%sPou転鱈vate直 %s si chce prida泥 pou転鱈vate直a %s do svojho zoznamu priate直ov"
-"%s%s"
+"Pou転鱈vate直 %s%s%s%s si chce v叩s (%s) prida泥 na svoj zoznam priate直ov%s%s"
 
 #. Buddy List
 msgid "Background Color"
@@ -12171,9 +12157,6 @@
 msgid "Fatal Error"
 msgstr "Z叩va転n叩 chyba"
 
-msgid "bug master"
-msgstr "p叩n ch箪b"
-
 msgid "artist"
 msgstr "umelec"
 
@@ -12224,9 +12207,8 @@
 msgid "Arabic"
 msgstr "arab�ina"
 
-#, fuzzy
 msgid "Assamese"
-msgstr "Zahanben箪"
+msgstr "as叩m�ina"
 
 msgid "Belarusian Latin"
 msgstr "bieloru邸tina, latinka"
@@ -12351,16 +12333,17 @@
 msgid "Lao"
 msgstr "lao邸tina"
 
-#, fuzzy
 msgid "Maithili"
-msgstr "svahil�ina"
+msgstr "maithil�ina"
+
+msgid "Meadow Mari"
+msgstr "marij�ina"
 
 msgid "Macedonian"
 msgstr "maced坦n�ina"
 
-#, fuzzy
 msgid "Malayalam"
-msgstr "malaj�ina"
+msgstr "malaj叩lam�ina"
 
 msgid "Mongolian"
 msgstr "mongol�ina"
@@ -13139,13 +13122,11 @@
 msgid "Exiting because another libpurple client is already running.\n"
 msgstr "Je spusten箪 in箪 klient libpurple, ukon�uje sa.\n"
 
-#, fuzzy
 msgid "_Media"
-msgstr "/_M辿di叩"
-
-#, fuzzy
+msgstr "_M辿di叩"
+
 msgid "_Hangup"
-msgstr "Zlo転i泥"
+msgstr "_Zlo転i泥"
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
@@ -13202,6 +13183,13 @@
 msgid "New Pounces"
 msgstr "Nov辿 sledovania"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
 msgstr "Odvola泥"
 
@@ -13564,9 +13552,8 @@
 msgid "_TURN server:"
 msgstr "_TURN server:"
 
-#, fuzzy
 msgid "_UDP Port:"
-msgstr "_Port:"
+msgstr "_UDP Port:"
 
 msgid "Use_rname:"
 msgstr "_Pou転鱈vate直sk辿 meno:"
@@ -13590,7 +13577,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13614,11 +13601,11 @@
 
 #. Translators: please do not translate "chromium-browser" here!
 msgid "Chromium (chromium-browser)"
-msgstr ""
+msgstr "Chromium (chromium-browser)"
 
 #. Translators: please do not translate "chrome" here!
 msgid "Chromium (chrome)"
-msgstr ""
+msgstr "Chromium (chrome)"
 
 msgid "Manual"
 msgstr "Vlastn辿"
@@ -13985,7 +13972,7 @@
 msgstr "Google Talk"
 
 msgid "Facebook (XMPP)"
-msgstr ""
+msgstr "Facebook (XMPP)"
 
 #, c-format
 msgid "The following error has occurred loading %s: %s"
@@ -14154,9 +14141,8 @@
 msgid "Small"
 msgstr "Mal辿"
 
-#, fuzzy
 msgid "Smaller versions of the default smileys"
-msgstr "Men邸鱈 z叩kladn鱈 smajl鱈ci"
+msgstr "Men邸ie verzie z叩kladn箪ch smajl鱈kov"
 
 msgid "Response Probability:"
 msgstr "Pravdepodobnos泥 odpovede:"
@@ -15183,7 +15169,6 @@
 msgid "Voice/Video Settings"
 msgstr "Nastavenia hlasu a obrazu"
 
-#, fuzzy
 msgid "Voice and Video Settings"
 msgstr "Nastavenia hlasu a obrazu"
 
@@ -15345,7 +15330,7 @@
 
 #. Installer Subsection Text
 msgid "Debug Symbols (for reporting crashes)"
-msgstr ""
+msgstr "Ladiace symboly (na nahlasovanie ch箪b)"
 
 #. Installer Subsection Text
 msgid "Desktop"
@@ -15357,12 +15342,17 @@
 "function; if retrying fails, you may need to use the 'Offline Installer' "
 "from http://pidgin.im/download/windows/ ."
 msgstr ""
+"Chyba s泥ahovania prostredia GTK+ Runtime ($R2).$\\rJe vy転adovan辿 na "
+"fungovanie programu Pidgin; ak v邸etko zlyh叩, m担転ete pou転i泥 'Offline "
+"in邸tal叩tor' z http://pidgin.im/download/windows/ ."
 
 #. $R2 will display the URL that the Debug Symbols failed to download from
 msgid ""
 "Error Installing Debug Symbols ($R2).$\\rIf retrying fails, you may need to "
 "use the 'Offline Installer' from http://pidgin.im/download/windows/ ."
 msgstr ""
+"Chyba in邸tal叩cie Ladiacich symbolov ($R2).$\\rAk v邸etko zlyh叩, m担転ete pou転i泥 "
+"'Offline in邸tal叩tor' z http://pidgin.im/download/windows/ ."
 
 #. $R3 will display the URL that the Dictionary failed to download from
 #, no-c-format
@@ -15371,16 +15361,17 @@
 "installation instructions are at: http://developer.pidgin.im/wiki/Installing"
 "%20Pidgin#manual_win32_spellcheck_installation"
 msgstr ""
+"Chyba in邸tal叩cie kontroly pravopisu ($R3).$\\rAk v邸etko zlyh叩, n叩vod na "
+"in邸tal叩ciu je na adrese: http://developer.pidgin.im/wiki/Installing"
+"%20Pidgin#manual_win32_spellcheck_installation"
 
 #. Installer Subsection Text
-#, fuzzy
 msgid "GTK+ Runtime (required if not present)"
-msgstr "GTK+ Runtime prostredie (nevyhnutn辿)"
+msgstr "GTK+ Runtime (vy転adovan辿 ak nedostupn辿)"
 
 #. Installer Subsection Text
-#, fuzzy
 msgid "Localizations"
-msgstr "Lokalita"
+msgstr "Lokaliz叩cie"
 
 #. "Next >" appears on a button on the License Page of the Installer
 msgid "Next >"
@@ -15395,6 +15386,8 @@
 "already present).$\\rAre you sure you want to skip installing the GTK+ "
 "Runtime?"
 msgstr ""
+"Pidgin vy転aduje a kompatibiln辿 GTK+ Runtime prostredie (ktor辿 nevyzer叩 by泥 "
+"dostupn辿).$\\rNaozaj chcete presko�i泥 in邸talovanie GTK+ prostredia?"
 
 #. Installer Subsection Text
 msgid "Shortcuts"
@@ -15429,12 +15422,14 @@
 
 #. Installer Subsection Text
 msgid "URI Handlers"
-msgstr ""
+msgstr "URI handlery"
 
 msgid ""
 "Unable to uninstall the currently installed version of Pidgin. The new "
 "version will be installed without removing the currently installed version."
 msgstr ""
+"Ned叩 sa odin邸talova泥 moment叩lne nain邸talovan炭 verziu Pidgin. Nov叩 verzia "
+"bude nain邸talovan叩 bez odstra�ovania starej verzie."
 
 #. Text displayed on Installer Finish Page
 msgid "Visit the Pidgin Web Page"
@@ -15443,6 +15438,12 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "Nem叩te opr叩vnenie na odin邸tal叩ciu tejto aplik叩cie."
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "Automaticky blokova泥 pou転鱈vate直ov mimo m担jho zoznamu kontaktov"
+
+#~ msgid "bug master"
+#~ msgstr "p叩n ch箪b"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "Na in-band bytestream prenose sa vyskytla chyba\n"
 
--- a/po/sl.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/sl.po	Sun Mar 13 18:14:04 2011 +0000
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Pidgin 2.7.3\n"
+"Project-Id-Version: Pidgin 2.7.10\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-07-30 14:57+0100\n"
+"POT-Creation-Date: 2011-03-10 01:00-0800\n"
+"PO-Revision-Date: 2011-02-20 13:27+0100\n"
 "Last-Translator: Martin Srebotnjak  <miles@filmsi.net>\n"
 "Language-Team: Martin Srebotnjak <miles@filmsi.net>\n"
 "Language: \n"
@@ -1702,13 +1702,12 @@
 "Potrdilo 邸e ni veljavno. Preverite, da sta datum in �as va邸ega sistema "
 "pravilno nastavljena."
 
-#, fuzzy
 msgid ""
 "The certificate has expired and should not be considered valid.  Check that "
 "your computer's date and time are accurate."
 msgstr ""
-"Potrdilo 邸e ni veljavno. Preverite, da sta datum in �as va邸ega sistema "
-"pravilno nastavljena."
+"Potrdilo je poteklo in ne sme biti upo邸tevano kot veljavno. Preverite, da "
+"sta datum in �as va邸ega sistema pravilno nastavljena."
 
 #. Translators: "domain" refers to a DNS domain (e.g. talk.google.com)
 msgid "The certificate presented is not issued to this domain."
@@ -2358,8 +2357,12 @@
 "Pot za shranjevanje datotek\n"
 "(Prosimo, vnesite polno pot)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "Samodejno zavrni uporabnikom, ki niso na seznamu prijateljev"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"Ko prenos datoteke zahteva uporabnik, ki *ni* na\n"
+"va邸em seznamu prijateljev:"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2372,6 +2375,9 @@
 msgid "Create a new directory for each user"
 msgstr "Ustvari novo mapo za vsakega uporabnika"
 
+msgid "Escape the filenames"
+msgstr "V imenih datotek uporabi nadomestne znake"
+
 msgid "Notes"
 msgstr "Opombe"
 
@@ -3237,9 +3243,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "Ime"
 
@@ -3850,7 +3854,10 @@
 msgstr ""
 "Stre転nik zahteva overovitev z navadnim besedilom preko ne邸ifriranega toka"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "Neveljaven odgovor stre転nika"
 
@@ -3993,7 +4000,6 @@
 msgid "Postal Code"
 msgstr "Po邸tna 邸tevilka"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "Dr転ava"
 
@@ -4753,20 +4759,17 @@
 msgid "Domain"
 msgstr "Domena"
 
-#, fuzzy
 msgid "Require encryption"
-msgstr "Zahtevaj pooblastilo"
-
-#, fuzzy
+msgstr "Zahtevaj 邸ifriranje"
+
 msgid "Use encryption if available"
-msgstr "Podatki o uporabniku niso dostopni: %s"
+msgstr "Uporabi 邸ifriranje, �e je na voljo"
 
 msgid "Use old-style SSL"
-msgstr ""
-
-#, fuzzy
+msgstr "Uporabi SSL stare vrste"
+
 msgid "Connection security"
-msgstr "�asovna omejitev povezave potekla"
+msgstr "Varnost povezave"
 
 msgid "Allow plaintext auth over unencrypted streams"
 msgstr "Dovoli overovitev z navadnim besedilom preko ne邸ifriranih toka"
@@ -5429,28 +5432,23 @@
 msgid "Set friendly name for %s."
 msgstr "Nastavite poimenovanje za %s."
 
-#, fuzzy
 msgid "Set Friendly Name"
-msgstr "Nastavi poimenovanje ..."
+msgstr "Nastavite poimenovanje"
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr "To je ime, pod katerim vas bodo videli va邸i MSN prijatelji."
 
-#, fuzzy
 msgid "This Location"
-msgstr "Lokacija"
-
-#, fuzzy
+msgstr "To mesto"
+
 msgid "This is the name that identifies this location"
-msgstr "To je ime, pod katerim vas bodo videli va邸i MSN prijatelji."
-
-#, fuzzy
+msgstr "To je ime, ki dolo�a to mesto"
+
 msgid "Other Locations"
-msgstr "Lokacija"
-
-#, fuzzy
+msgstr "Druga mesta"
+
 msgid "You can sign out from other locations here"
-msgstr "Prijavili ste se z drugega mesta"
+msgstr "Tukaj se lahko odjavite z drugih mest"
 
 #. TODO: Due to limitations in our current request field API, the
 #. following string will show up with a trailing colon.  This should
@@ -5458,18 +5456,16 @@
 #. a separate purple_request_field_label_new_without_colon function,
 #. or by never automatically adding the colon and requiring that
 #. callers add the colon themselves.
-#, fuzzy
 msgid "You are not signed in from any other locations."
-msgstr "Prijavili ste se z drugega mesta"
-
-#, fuzzy
+msgstr "Niste prijavljeni 邸e z nobenega drugega mesta"
+
 msgid "Allow multiple logins?"
-msgstr "Dovoli ve� hkratnih prijav"
+msgstr "貼elite dovoliti ve� hkratnih prijav?"
 
 msgid ""
 "Do you want to allow or disallow connecting from multiple locations "
 "simultaneously?"
-msgstr ""
+msgstr "貼elite dovoliti ali prepovedati hkratno povezovanje z ve� mest?"
 
 msgid "Allow"
 msgstr "Dovoli"
@@ -5556,9 +5552,8 @@
 msgid "Set Friendly Name..."
 msgstr "Nastavi poimenovanje ..."
 
-#, fuzzy
 msgid "View Locations..."
-msgstr "Izberi mesto ..."
+msgstr "Poka転i mesta ..."
 
 msgid "Set Home Phone Number..."
 msgstr "Nastavi 邸t. doma�ega telefona ..."
@@ -5572,9 +5567,8 @@
 msgid "Enable/Disable Mobile Devices..."
 msgstr "Omogo�i/onemogo�i mobilne naprave ..."
 
-#, fuzzy
 msgid "Allow/Disallow Multiple Logins..."
-msgstr "Dovoli/prepovej mobilne strani ..."
+msgstr "Dovoli/prepovej hkratne prijave ..."
 
 msgid "Allow/Disallow Mobile Pages..."
 msgstr "Dovoli/prepovej mobilne strani ..."
@@ -5801,7 +5795,7 @@
 msgstr "Dovoli neposredne povezave"
 
 msgid "Allow connecting from multiple locations"
-msgstr ""
+msgstr "Dovoli povezovanje z ve� mest"
 
 msgid "nudge: nudge a user to get their attention"
 msgstr "nudge: Dregnite prijatelja, da vas bo opazil"
@@ -5950,9 +5944,7 @@
 
 #, c-format
 msgid "%s invited you to view his/her webcam, but this is not yet supported."
-msgstr ""
-"%s vas je povabil(a), da gledati njegovo/njeno spletno kamero, kar pa 邸e ni "
-"podprto."
+msgstr "%s vas je povabil k ogledu svoje spletne kamere, kar 邸e ni podprto."
 
 msgid "Away From Computer"
 msgstr "Stran od ra�unalnika"
@@ -6107,6 +6099,10 @@
 msgid "Connecting..."
 msgstr "Povezovanje ..."
 
+#, fuzzy
+msgid "The Display Name you entered is too short."
+msgstr "Vneseno pojavno ime ni veljavno."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "Vneseni PIN ni veljavne dol転ine [7-10]."
 
@@ -6177,33 +6173,6 @@
 msgid "Retrieving User Information..."
 msgstr "Pridobivanje podatkov o uporabniku ..."
 
-msgid "Loading menu..."
-msgstr "Nalaganje menija ..."
-
-msgid "Status Message"
-msgstr "Sporo�ilo stanja"
-
-msgid "Rejection Message"
-msgstr "Sporo�ilo zavrnitve"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "Skrita 邸tevilka"
-
-msgid "Your MXit ID..."
-msgstr "Va邸 MXit ID ..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "Stre転nik WAP"
-
-msgid "Connect via HTTP"
-msgstr "Pove転i prek HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "Omogo�i pozdravno okno ob zagonu"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "Brcnjeni ste bili s tega MultiMX."
@@ -6218,6 +6187,46 @@
 msgid "You have invited"
 msgstr "Povabili ste uporabnika"
 
+msgid "Loading menu..."
+msgstr "Nalaganje menija ..."
+
+msgid "Status Message"
+msgstr "Sporo�ilo stanja"
+
+msgid "Rejection Message"
+msgstr "Sporo�ilo zavrnitve"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "Skrita 邸tevilka"
+
+#, fuzzy
+msgid "No profile available"
+msgstr "Ni na voljo"
+
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "Ta ra�un nima omogo�enega e-po邸tnega naslova."
+
+msgid "Your MXit ID..."
+msgstr "Va邸 MXit ID ..."
+
+#. contact is in Deleted, Rejected or None state
+#, fuzzy
+msgid "Re-Invite"
+msgstr "Povabi"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "Stre転nik WAP"
+
+msgid "Connect via HTTP"
+msgstr "Pove転i prek HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "Omogo�i pozdravno okno ob zagonu"
+
 msgid "Last Online"
 msgstr "Nazadnje povezan"
 
@@ -6978,6 +6987,8 @@
 "You required encryption in your account settings, but one of the servers "
 "doesn't support it."
 msgstr ""
+"Zahtevali ste 邸ifriranje za nastavitve svojih ra�unov, vendar eden od "
+"stre転nikov 邸ifriranja ne podpira."
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
@@ -6985,9 +6996,8 @@
 msgid "Error requesting %s: %s"
 msgstr "Napaka pri zahtevanju %s: %s"
 
-#, fuzzy
 msgid "The server returned an empty response"
-msgstr "Ni se mogo�e povezati: Stre転nik je vrnil prazen odgovor."
+msgstr "Stre転nik je vrnil prazen odgovor"
 
 msgid ""
 "Server requested that you fill out a CAPTCHA in order to sign in, but this "
@@ -7298,6 +7308,8 @@
 "You required encryption in your account settings, but encryption is not "
 "supported by your system."
 msgstr ""
+"Zahtevali ste 邸ifriranje za nastavitve svojih ra�unov, vendar va邸 sistem "
+"邸ifriranja ne podpira."
 
 #, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
@@ -7507,6 +7519,14 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "Povezava do pogovorne sobe %s je bila prekinjena."
 
+msgid "The new formatting is invalid."
+msgstr "Oblika novega zapisa je neveljavna."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr ""
+"Z oblikovanjem uporabni邸kega imena lahko spreminjate samo velike �rke in "
+"presledke."
+
 msgid "Pop-Up Message"
 msgstr "Pojavno sporo�ilo"
 
@@ -7788,20 +7808,11 @@
 msgid "ICQ Privacy Options"
 msgstr "Mo転nosti zasebnosti ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "Oblika novega zapisa je neveljavna."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr ""
-"Z oblikovanjem uporabni邸kega imena lahko spreminjate samo velike �rke in "
-"presledke."
-
 msgid "Change Address To:"
 msgstr "Spremeni naslov v:"
 
-#, fuzzy
 msgid "you are not waiting for authorization"
-msgstr "<i>ne �akate na pooblastilo</i>"
+msgstr "ne �akate na pooblastilo"
 
 msgid "You are awaiting authorization from the following buddies"
 msgstr "Pri�akujete pooblastila od naslednjih prijateljev"
@@ -7839,13 +7850,11 @@
 msgid "Set Privacy Options..."
 msgstr "Nastavi mo転nosti zasebnosti ..."
 
-#, fuzzy
 msgid "Show Visible List"
-msgstr "Poka_転i seznam prijateljev"
-
-#, fuzzy
+msgstr "Poka転i seznam vidnih"
+
 msgid "Show Invisible List"
-msgstr "Seznam povabljenih"
+msgstr "Poka転i seznam nevidnih"
 
 #. AIM actions
 msgid "Confirm Account"
@@ -7863,9 +7872,8 @@
 msgid "Search for Buddy by Email Address..."
 msgstr "I邸�i prijatelja po e-naslovu ..."
 
-#, fuzzy
 msgid "Don't use encryption"
-msgstr "Zahtevaj pooblastilo"
+msgstr "Ne uporabi 邸ifriranja"
 
 msgid "Use clientLogin"
 msgstr "Uporabi prijavo clientLogin"
@@ -7906,75 +7914,6 @@
 "za sporo�anje s slikami. Ker bo razkrit naslov IP, sodi ta povezava med "
 "tveganja zasebnosti."
 
-msgid "Invalid SNAC"
-msgstr "Neveljaven SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "Prekora�ena omejitev hitrosti stre転nika"
-
-msgid "Client rate limit exceeded"
-msgstr "Prekora�ena omejitev hitrosti odjemalca"
-
-msgid "Service unavailable"
-msgstr "Storitev ni dostopna"
-
-msgid "Service not defined"
-msgstr "Storitev ni definirana"
-
-msgid "Obsolete SNAC"
-msgstr "Zastarel SNAC"
-
-msgid "Not supported by host"
-msgstr "Ni podprto s strani gostitelja"
-
-msgid "Not supported by client"
-msgstr "Ni podprto s strani odjemalca"
-
-msgid "Refused by client"
-msgstr "Zavrnjeno s strani odjemalca"
-
-msgid "Reply too big"
-msgstr "Odgovor preobse転en"
-
-msgid "Responses lost"
-msgstr "Odgovori izgubljeni"
-
-msgid "Request denied"
-msgstr "Zahteva zavrnjena"
-
-msgid "Busted SNAC payload"
-msgstr "Razkrinkana obremenitev SNAC"
-
-msgid "Insufficient rights"
-msgstr "Nezadostne pravice"
-
-msgid "In local permit/deny"
-msgstr "V krajevnem dovoli/prepovej"
-
-msgid "Warning level too high (sender)"
-msgstr "Raven opozoril previsoka (oddajnik)"
-
-msgid "Warning level too high (receiver)"
-msgstr "Raven opozoril previsoka (sprejemnik)"
-
-msgid "User temporarily unavailable"
-msgstr "Uporabnik trenutno ni na voljo"
-
-msgid "No match"
-msgstr "Ni zadetkov"
-
-msgid "List overflow"
-msgstr "Seznam poln"
-
-msgid "Request ambiguous"
-msgstr "Zahteva je dvoumna"
-
-msgid "Queue full"
-msgstr "Vrsta polna"
-
-msgid "Not while on AOL"
-msgstr "Ne medtem ko na AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "Ikona prijatelja"
@@ -8093,6 +8032,75 @@
 msgid "Capabilities"
 msgstr "Zmo転nosti"
 
+msgid "Invalid SNAC"
+msgstr "Neveljaven SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "Prekora�ena omejitev hitrosti stre転nika"
+
+msgid "Client rate limit exceeded"
+msgstr "Prekora�ena omejitev hitrosti odjemalca"
+
+msgid "Service unavailable"
+msgstr "Storitev ni dostopna"
+
+msgid "Service not defined"
+msgstr "Storitev ni definirana"
+
+msgid "Obsolete SNAC"
+msgstr "Zastarel SNAC"
+
+msgid "Not supported by host"
+msgstr "Ni podprto s strani gostitelja"
+
+msgid "Not supported by client"
+msgstr "Ni podprto s strani odjemalca"
+
+msgid "Refused by client"
+msgstr "Zavrnjeno s strani odjemalca"
+
+msgid "Reply too big"
+msgstr "Odgovor preobse転en"
+
+msgid "Responses lost"
+msgstr "Odgovori izgubljeni"
+
+msgid "Request denied"
+msgstr "Zahteva zavrnjena"
+
+msgid "Busted SNAC payload"
+msgstr "Razkrinkana obremenitev SNAC"
+
+msgid "Insufficient rights"
+msgstr "Nezadostne pravice"
+
+msgid "In local permit/deny"
+msgstr "V krajevnem dovoli/prepovej"
+
+msgid "Warning level too high (sender)"
+msgstr "Raven opozoril previsoka (oddajnik)"
+
+msgid "Warning level too high (receiver)"
+msgstr "Raven opozoril previsoka (sprejemnik)"
+
+msgid "User temporarily unavailable"
+msgstr "Uporabnik trenutno ni na voljo"
+
+msgid "No match"
+msgstr "Ni zadetkov"
+
+msgid "List overflow"
+msgstr "Seznam poln"
+
+msgid "Request ambiguous"
+msgstr "Zahteva je dvoumna"
+
+msgid "Queue full"
+msgstr "Vrsta polna"
+
+msgid "Not while on AOL"
+msgstr "Ne medtem ko na AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8102,9 +8110,8 @@
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user when your status is set to
 #. Invisible (this is the default).
-#, fuzzy
 msgid "Don't Appear Online"
-msgstr "Izgledaj povezan"
+msgstr "Ne prika転i kot povezanega"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to always appear offline to the chosen user (even when your status
@@ -8116,35 +8123,32 @@
 #. you to appear offline to the chosen user if you are invisible, and
 #. appear online to the chosen user if you are not invisible (this is the
 #. default).
-#, fuzzy
 msgid "Don't Appear Offline"
-msgstr "Izgledaj brez povezave"
-
-#, fuzzy
+msgstr "Ne prika転i kot nepovezanega"
+
 msgid "you have no buddies on this list"
-msgstr "Brcnjeni ste bili s tega MultiMX."
-
-#, fuzzy, c-format
+msgstr "na tem seznamu nimate prijateljev"
+
+#, c-format
 msgid ""
 "You can add a buddy to this list by right-clicking on them and selecting \"%s"
 "\""
 msgstr ""
-"�e 転elite, lahko ponovno zahtevate pooblastilo od teh prijateljev, tako da "
-"desno kliknete na njih in izberete \"Ponovno zahtevaj pooblastilo.\""
-
-#, fuzzy
+"Na ta seznam lahko dodate prijatelja, tako da desno kliknete nanj in "
+"izberete \"%s\""
+
 msgid "Visible List"
-msgstr "Viden"
+msgstr "Seznam vidnih"
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
 msgstr ""
-
-#, fuzzy
+"Ti prijatelji bodo vedno videli va邸e stanje, ko preklopite na \"Neviden\""
+
 msgid "Invisible List"
-msgstr "Seznam povabljenih"
+msgstr "Seznam nevidnih"
 
 msgid "These buddies will always see you as offline"
-msgstr ""
+msgstr "Ti prijatelji vas bodo vedno videli kot nepovezane"
 
 msgid "Aquarius"
 msgstr "Vodnar"
@@ -8324,9 +8328,9 @@
 msgid "Your request was rejected."
 msgstr "Va邸a zahteva je bila zavrnjena."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requires verification: %s"
-msgstr "%u zahteva preverjanje"
+msgstr "%u zahteva preverjanje: %s"
 
 msgid "Add buddy question"
 msgstr "Dodaj vpra邸anje za prijatelja"
@@ -8689,14 +8693,14 @@
 msgid "Select Server"
 msgstr "Izberite stre転nik"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "Pove転i prek TCP"
@@ -8710,6 +8714,9 @@
 msgid "Show chat room when msg comes"
 msgstr "Poka転i klepetalnico, ko pride sporo�ilo"
 
+msgid "Use default font"
+msgstr "Uporabi privzeto pisavo"
+
 msgid "Keep alive interval (seconds)"
 msgstr "Interval ohranjanja povezave (s)"
 
@@ -11255,9 +11262,10 @@
 "Vedno se k temu oknu lahko vrnete in dodate, uredite ali odstranite ra�une z "
 "<b>Ra�uni->Upravljaj z ra�uni</b> v oknu seznama prijateljev."
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"
-msgstr "Uporabnik %s%s%s%s 転eli dodati %s na svoj seznam prijateljev%s%s."
+msgstr ""
+"Uporabnik %s%s%s%s vas (%s) 転eli dodati na svoj seznam prijateljev%s%s."
 
 #. Buddy List
 msgid "Background Color"
@@ -12250,9 +12258,6 @@
 msgid "Fatal Error"
 msgstr "Usodna napaka"
 
-msgid "bug master"
-msgstr "Kralj hro邸�ev"
-
 msgid "artist"
 msgstr "oblikovalec"
 
@@ -12429,9 +12434,11 @@
 msgid "Lao"
 msgstr "lao邸ko"
 
-#, fuzzy
 msgid "Maithili"
-msgstr "svahili"
+msgstr "maitilsko"
+
+msgid "Meadow Mari"
+msgstr "dolnjemarijsko"
 
 msgid "Macedonian"
 msgstr "makedonsko"
@@ -13649,9 +13656,8 @@
 msgid "_TURN server:"
 msgstr "Stre転nik _TURN:"
 
-#, fuzzy
 msgid "_UDP Port:"
-msgstr "_Vrata:"
+msgstr "Vrata _UDP:"
 
 msgid "Use_rname:"
 msgstr "Upo_rabni邸ko ime:"
@@ -13675,7 +13681,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13699,11 +13705,11 @@
 
 #. Translators: please do not translate "chromium-browser" here!
 msgid "Chromium (chromium-browser)"
-msgstr ""
+msgstr "Chromium (chromium-browser)"
 
 #. Translators: please do not translate "chrome" here!
 msgid "Chromium (chrome)"
-msgstr ""
+msgstr "Chromium (chrome)"
 
 msgid "Manual"
 msgstr "Ro�ni"
@@ -14071,7 +14077,7 @@
 msgstr "Google Talk"
 
 msgid "Facebook (XMPP)"
-msgstr ""
+msgstr "Facebook (XMPP)"
 
 #, c-format
 msgid "The following error has occurred loading %s: %s"
@@ -14239,7 +14245,6 @@
 msgid "Small"
 msgstr "Manj邸e"
 
-#, fuzzy
 msgid "Smaller versions of the default smileys"
 msgstr "Manj邸e razli�ice privzetih smej�kov"
 
@@ -15273,9 +15278,8 @@
 msgid "Voice/Video Settings"
 msgstr "Glasovne/video nastavitve"
 
-#, fuzzy
 msgid "Voice and Video Settings"
-msgstr "Glasovne/video nastavitve"
+msgstr "Glasovne in video nastavitve"
 
 #. *< name
 #. *< version
@@ -15549,68 +15553,3 @@
 
 msgid "You do not have permission to uninstall this application."
 msgstr "Za odstranitev programa nimate ustreznih pravic."
-
-#~ msgid "An error occurred on the in-band bytestream transfer\n"
-#~ msgstr ""
-#~ "Pri prenosu v znotraj pasovnem zlogovnem pretoku je pri邸lo do napake\n"
-
-#~ msgid "Transfer was closed."
-#~ msgstr "Prenos je bil zaprt."
-
-#~ msgid "Failed to open in-band bytestream"
-#~ msgstr "Znotraj pasovnega zlogovnega pretoka ni uspelo odpreti"
-
-#~ msgid "Set your friendly name."
-#~ msgstr "Nastavite va邸e poimenovanje."
-
-#~ msgid "Error requesting %s"
-#~ msgstr "Napaka pri zahtevanju %s"
-
-#~ msgid "The certificate has expired and should not be considered valid."
-#~ msgstr ""
-#~ "Digitalno potrdilo je poteklo in ga ni priporo�ljivo 邸teti za veljavnega."
-
-#~ msgid "Require SSL/TLS"
-#~ msgstr "Zahtevaj SSL/TLS"
-
-#~ msgid "Force old (port 5223) SSL"
-#~ msgstr "Vsili star SSL (vrata 5223)"
-
-#~ msgid ""
-#~ "[Unable to display a message from this user because it contained invalid "
-#~ "characters.]"
-#~ msgstr ""
-#~ "[Ni mogo�e prikazati sporo�ila tega uporabnika, ker vsebuje neveljavne "
-#~ "znake.]"
-
-#~ msgid "Search for Buddy by Information"
-#~ msgstr "I邸�i prijatelja po informaciji"
-
-#~ msgid "The name you entered is invalid."
-#~ msgstr "Vneseno ime ni veljavno."
-
-#~ msgid "The certificate is not valid yet."
-#~ msgstr "Digitalno potrdilo 邸e ni veljavno."
-
-#~ msgid "The nick name you entered is invalid."
-#~ msgstr "Vneseni vzdevek ni veljaven."
-
-#~ msgid "MXit Login Name"
-#~ msgstr "Prijavno ime MXit"
-
-#~ msgid "Nick Name"
-#~ msgstr "Vzdevek"
-
-#~ msgid "Your Mobile Number..."
-#~ msgstr "Va邸a mobilna 邸tevilka ..."
-
-#, fuzzy
-#~ msgid "Rate to host"
-#~ msgstr "Povabi na klepet"
-
-#, fuzzy
-#~ msgid "Rate to client"
-#~ msgstr "Nazadnje znani odjemalec"
-
-#~ msgid "/Media/_Hangup"
-#~ msgstr "/Mediji/_Odlo転i"
--- a/po/uk.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/uk.po	Sun Mar 13 18:14:04 2011 +0000
@@ -3,14 +3,14 @@
 # This file is distributed under the same license as the Pidgin package.
 #
 # Maxim V. Dziumanenko <mvd@mylinux.com.ua>, 2004-2005.
-# Oleksandr Kovalenko <alx.kovalenko@gmail.com>, 2009-2010.
+# Oleksandr Kovalenko <alx.kovalenko@gmail.com>, 2009-2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Pidgin\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-26 22:11-0500\n"
-"PO-Revision-Date: 2010-12-19 22:07+0300\n"
+"POT-Creation-Date: 2011-03-10 02:21-0800\n"
+"PO-Revision-Date: 2011-03-09 00:11+0300\n"
 "Last-Translator: Oleksandr Kovalenko <alx.kovalenko@gmail.com>\n"
 "Language-Team: Ukrainian <uk@li.org>\n"
 "Language: uk\n"
@@ -2360,8 +2360,12 @@
 "丿仍�� 亟亠 亰弍亠��亞舒�亳 �舒亶仍亳\n"
 "(��亟� 仍舒�从舒, 于从舒亢��� 仗仂于仆亳亶 �仍��)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "�于�仂仄舒�亳�仆仂 于�亟�亳仍亳�亳 于�亟 从仂�亳���于舒��于, �从� 仆亠 于 仗亠�亠仍�从� 从仂仆�舒从��于"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr ""
+"�仂仍亳 亰舒仗亳� 仆舒 仗亠�亠亟舒于舒仆仆� �舒亶仍� 仆舒亟�仂亟亳�� 于�亟 从仂�亳���于舒�舒,\n"
+"�从亳亶 *仆亠* 于 于舒�仂仄� 仗亠�亠仍�从� 从仂仆�舒从��于"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2374,6 +2378,9 @@
 msgid "Create a new directory for each user"
 msgstr "弌�于仂�亳�亳 仆仂于� �亠从� 亟仍� 从仂亢仆仂亞仂 从仂�亳���于舒�舒"
 
+msgid "Escape the filenames"
+msgstr "�从�舒仆�于舒�亳 仆舒亰于亳 �舒亶仍�于"
+
 msgid "Notes"
 msgstr "��亳仄��从亳"
 
@@ -3218,9 +3225,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "�仄'�"
 
@@ -3832,7 +3837,10 @@
 msgstr ""
 "弌亠�于亠� 于亳仄舒亞舒� 舒于�亠仆�亳��从舒��� 亰于亳�舒亶仆亳仄 �亠从��仂仄 �亠�亠亰 仆亠�亳��仂于舒仆亳亶 仗仂��从"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "�亠仗�舒于亳仍�仆舒 于�亟仗仂于�亟� 于�亟 �亠�于亠�舒"
 
@@ -3976,7 +3984,6 @@
 msgid "Postal Code"
 msgstr "�仂��仂于亳亶 �仆亟亠从�"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "��舒�仆舒"
 
@@ -6073,6 +6080,9 @@
 msgid "Connecting..."
 msgstr "�'�亟仆舒仆仆�..."
 
+msgid "The Display Name you entered is too short."
+msgstr "�于亠亟亠仆亠 于�亟仂弍�舒亢�于舒仆亠 �仄'� 亰舒从仂�仂�从亠."
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "�于亠亟亠仆亳亶 PIN 仄舒� 仆亠仗�舒于亳仍�仆� 亟仂于亢亳仆� [7-10]."
 
@@ -6141,33 +6151,6 @@
 msgid "Retrieving User Information..."
 msgstr "���亳仄舒仆仆� 于�亟仂仄仂��亠亶 仗�仂 从仂�亳���于舒�舒..."
 
-msgid "Loading menu..."
-msgstr "�舒于舒仆�舒亢亠仆仆� 仄亠仆�..."
-
-msgid "Status Message"
-msgstr "�仂于�亟仂仄仍亠仆仆� ��舒仆�"
-
-msgid "Rejection Message"
-msgstr "�仂于�亟仂仄仍亠仆仆� 于�亟仄仂于亳"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "弌�仂于舒仆亳亶 仆仂仄亠�"
-
-msgid "Your MXit ID..."
-msgstr "�舒� MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "弌亠�于亠� WAP"
-
-msgid "Connect via HTTP"
-msgstr "�'�亟仆舒仆仆� �亠�亠亰 HTTP"
-
-msgid "Enable splash-screen popup"
-msgstr "丕于�仄从仆��亳 于亳�亳仆舒��� 亠从�舒仆仆� 亰舒��舒于从�"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "�舒� 于亳从亳仆�仍亳 亰 ��仂亞仂 MultiMX."
@@ -6182,6 +6165,43 @@
 msgid "You have invited"
 msgstr "�舒� 亰舒仗�仂�亳仍亳"
 
+msgid "Loading menu..."
+msgstr "�舒于舒仆�舒亢亠仆仆� 仄亠仆�..."
+
+msgid "Status Message"
+msgstr "�仂于�亟仂仄仍亠仆仆� ��舒仆�"
+
+msgid "Rejection Message"
+msgstr "�仂于�亟仂仄仍亠仆仆� 于�亟仄仂于亳"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "弌�仂于舒仆亳亶 仆仂仄亠�"
+
+msgid "No profile available"
+msgstr "��仂��仍� 仆亠 亟仂���仗仆亳亶"
+
+msgid "This contact does not have a profile."
+msgstr "丶亠亶 从仂仆�舒从� 仆亠 仄舒� 仗�仂��仍�."
+
+msgid "Your MXit ID..."
+msgstr "�舒� MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "�舒仗�仂�亳�亳 �亠 �舒亰"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "弌亠�于亠� WAP"
+
+msgid "Connect via HTTP"
+msgstr "�'�亟仆舒仆仆� �亠�亠亰 HTTP"
+
+msgid "Enable splash-screen popup"
+msgstr "丕于�仄从仆��亳 于亳�亳仆舒��� 亠从�舒仆仆� 亰舒��舒于从�"
+
 msgid "Last Online"
 msgstr "�仂��舒仆仆� 于 仄亠�亠亢�"
 
@@ -7489,6 +7509,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "�舒� 弍�仍仂 于�亟'�亟仆舒仆仂 于�亟 从�仄仆舒�亳 弍舒仍舒�从亳 %s."
 
+msgid "The new formatting is invalid."
+msgstr "�仂于亠 �仂�仄舒��于舒仆仆� 仆亠亟仂仗���亳仄亠."
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "个仂�仄舒��于舒仆仆� �仄亠仆� 从仂�亳���于舒�舒 仄仂亢亠 亰仄�仆亳�亳 仍亳�亠 �亠亞���� �舒 仗�仂弍�仍亳."
+
 msgid "Pop-Up Message"
 msgstr "弌仗仍亳于舒��亠 仗仂于�亟仂仄仍亠仆仆�"
 
@@ -7758,12 +7784,6 @@
 msgid "ICQ Privacy Options"
 msgstr "�舒�舒仄亠��亳 仗�亳于舒�仆仂��� ICQ"
 
-msgid "The new formatting is invalid."
-msgstr "�仂于亠 �仂�仄舒��于舒仆仆� 仆亠亟仂仗���亳仄亠."
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "个仂�仄舒��于舒仆仆� �仄亠仆� 从仂�亳���于舒�舒 仄仂亢亠 亰仄�仆亳�亳 仍亳�亠 �亠亞���� �舒 仗�仂弍�仍亳."
-
 msgid "Change Address To:"
 msgstr "�仄�仆亳�亳 舒亟�亠�� 仆舒:"
 
@@ -7870,75 +7890,6 @@
 "�舒 � 仆亠仂弍��亟仆亳仄 亟仍� 仗亠�亠亟舒于舒仆仆� 亰仂弍�舒亢亠仆�. 丐舒从 �从 于舒�舒 �� 舒亟�亠�舒 弍�亟亠 "
 "�仂亰从�亳�舒, �亠 仄仂亢亠 于于舒亢舒�亳�� 亰舒亞�仂亰仂� 弍亠亰仗亠��."
 
-msgid "Invalid SNAC"
-msgstr "�亠仗�舒于亳仍�仆亳亶 SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "�仂��亞仆��仂 仂弍仄亠亢亠仆仆� �于亳亟从仂��� �亠�于亠�舒"
-
-msgid "Client rate limit exceeded"
-msgstr "�仂��亞仆��仂 仂弍仄亠亢亠仆仆� �于亳亟从仂��� 从仍��仆�舒"
-
-msgid "Service unavailable"
-msgstr "�仂�仍�亞舒 仆亠亟仂���仗仆舒"
-
-msgid "Service not defined"
-msgstr "�仂�仍�亞舒 仆亠 于亳亰仆舒�亠仆舒"
-
-msgid "Obsolete SNAC"
-msgstr "�舒��舒��仍亳亶 SNAC"
-
-msgid "Not supported by host"
-msgstr "�亠 仗�亟��亳仄������ 于�亰仍仂仄"
-
-msgid "Not supported by client"
-msgstr "�亠 仗�亟��亳仄������ 从仍��仆�仂仄"
-
-msgid "Refused by client"
-msgstr "��亟从亳仆��舒 从仍��仆�仂仄"
-
-msgid "Reply too big"
-msgstr "��亟仗仂于�亟� 亰舒于亠仍亳从舒"
-
-msgid "Responses lost"
-msgstr "��亟仗仂于�亟� 于��舒�亠仆�"
-
-msgid "Request denied"
-msgstr "�舒仗亳� 于�亟�亳仍亠仆亳亶"
-
-msgid "Busted SNAC payload"
-msgstr "��仗�仂于舒仆� 亟舒仆� SNAC"
-
-msgid "Insufficient rights"
-msgstr "�亠亟仂��舒�仆�仂 仗�舒于"
-
-msgid "In local permit/deny"
-msgstr "� 仄���亠于仂仄� 仗亠�亠仍�从� 亟仂亰于仂仍亠仆亳�/亰舒弍仂�仂仆亠仆亳�"
-
-msgid "Warning level too high (sender)"
-msgstr "��于亠仆� 仗仂仗亠�亠亟亢亠仆仆� 亟�亢亠 于亳�仂从亳亶 (于�亟仗�舒于仆亳从)"
-
-msgid "Warning level too high (receiver)"
-msgstr "��于亠仆� 仗仂仗亠�亠亟亢亠仆仆� 亟�亢亠 于亳�仂从亳亶 (仂��亳仄�于舒�)"
-
-msgid "User temporarily unavailable"
-msgstr "�仂�亳���于舒� �亳仄�舒�仂于仂 仆亠亟仂���仗仆亳亶"
-
-msgid "No match"
-msgstr "�亠仄舒� 亰弍�亞�于"
-
-msgid "List overflow"
-msgstr "�亠�亠仍�从 仗亠�亠仗仂于仆亠仆亳亶"
-
-msgid "Request ambiguous"
-msgstr "�舒仗亳� 仆亠亰�仂亰�仄�仍亳亶"
-
-msgid "Queue full"
-msgstr "丼亠�亞舒 仗亠�亠仗仂于仆亠仆舒"
-
-msgid "Not while on AOL"
-msgstr "�亠 �仂亟�, 从仂仍亳 � AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "�仆舒�仂从 从仂�亳���于舒�舒"
@@ -8057,6 +8008,75 @@
 msgid "Capabilities"
 msgstr "�仂亢仍亳于仂���"
 
+msgid "Invalid SNAC"
+msgstr "�亠仗�舒于亳仍�仆亳亶 SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "�仂��亞仆��仂 仂弍仄亠亢亠仆仆� �于亳亟从仂��� �亠�于亠�舒"
+
+msgid "Client rate limit exceeded"
+msgstr "�仂��亞仆��仂 仂弍仄亠亢亠仆仆� �于亳亟从仂��� 从仍��仆�舒"
+
+msgid "Service unavailable"
+msgstr "�仂�仍�亞舒 仆亠亟仂���仗仆舒"
+
+msgid "Service not defined"
+msgstr "�仂�仍�亞舒 仆亠 于亳亰仆舒�亠仆舒"
+
+msgid "Obsolete SNAC"
+msgstr "�舒��舒��仍亳亶 SNAC"
+
+msgid "Not supported by host"
+msgstr "�亠 仗�亟��亳仄������ 于�亰仍仂仄"
+
+msgid "Not supported by client"
+msgstr "�亠 仗�亟��亳仄������ 从仍��仆�仂仄"
+
+msgid "Refused by client"
+msgstr "��亟从亳仆��舒 从仍��仆�仂仄"
+
+msgid "Reply too big"
+msgstr "��亟仗仂于�亟� 亰舒于亠仍亳从舒"
+
+msgid "Responses lost"
+msgstr "��亟仗仂于�亟� 于��舒�亠仆�"
+
+msgid "Request denied"
+msgstr "�舒仗亳� 于�亟�亳仍亠仆亳亶"
+
+msgid "Busted SNAC payload"
+msgstr "��仗�仂于舒仆� 亟舒仆� SNAC"
+
+msgid "Insufficient rights"
+msgstr "�亠亟仂��舒�仆�仂 仗�舒于"
+
+msgid "In local permit/deny"
+msgstr "� 仄���亠于仂仄� 仗亠�亠仍�从� 亟仂亰于仂仍亠仆亳�/亰舒弍仂�仂仆亠仆亳�"
+
+msgid "Warning level too high (sender)"
+msgstr "��于亠仆� 仗仂仗亠�亠亟亢亠仆仆� 亟�亢亠 于亳�仂从亳亶 (于�亟仗�舒于仆亳从)"
+
+msgid "Warning level too high (receiver)"
+msgstr "��于亠仆� 仗仂仗亠�亠亟亢亠仆仆� 亟�亢亠 于亳�仂从亳亶 (仂��亳仄�于舒�)"
+
+msgid "User temporarily unavailable"
+msgstr "�仂�亳���于舒� �亳仄�舒�仂于仂 仆亠亟仂���仗仆亳亶"
+
+msgid "No match"
+msgstr "�亠仄舒� 亰弍�亞�于"
+
+msgid "List overflow"
+msgstr "�亠�亠仍�从 仗亠�亠仗仂于仆亠仆亳亶"
+
+msgid "Request ambiguous"
+msgstr "�舒仗亳� 仆亠亰�仂亰�仄�仍亳亶"
+
+msgid "Queue full"
+msgstr "丼亠�亞舒 仗亠�亠仗仂于仆亠仆舒"
+
+msgid "Not while on AOL"
+msgstr "�亠 �仂亟�, 从仂仍亳 � AOL"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
@@ -8648,14 +8668,14 @@
 msgid "Select Server"
 msgstr "�亳弍亠���� �亠�于亠�"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "�'�亟仆舒仆仆� 仗仂 TCP"
@@ -8669,6 +8689,9 @@
 msgid "Show chat room when msg comes"
 msgstr "�仂从舒亰舒�亳 从�仄仆舒�� 弍舒仍舒�从亳, 从仂仍亳 仆舒亟�亶�仍仂 仗仂于�亟仂仄仍亠仆仆�"
 
+msgid "Use default font"
+msgstr "�亳从仂�亳��仂于�于舒�亳 �亳仗仂于亳亶 ��亳��"
+
 msgid "Keep alive interval (seconds)"
 msgstr "丼舒� 仄�亢 仗仂于�亟仂仄仍亠仆仆�仄亳 仗�亳���仆仂��� (�)"
 
@@ -12222,9 +12245,6 @@
 msgid "Fatal Error"
 msgstr "个舒�舒仍�仆舒 仗仂仄亳仍从舒"
 
-msgid "bug master"
-msgstr "�仗亠��舒仍��� 亰 于舒亟"
-
 msgid "artist"
 msgstr "于亳从仂仆舒于亠��"
 
@@ -12404,6 +12424,9 @@
 msgid "Maithili"
 msgstr "�舒亶���仍�"
 
+msgid "Meadow Mari"
+msgstr "��亞仂于仂仄舒��亶��从舒"
+
 msgid "Macedonian"
 msgstr "�舒从亠亟仂仆��从舒"
 
@@ -13247,6 +13270,13 @@
 msgid "New Pounces"
 msgstr "�仂于亠 ��亠亢亠仆仆�"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
 msgstr "��亟从亳仆��亳"
 
@@ -15504,5 +15534,11 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "�亳 仆亠 仄舒��亠 仗�舒于舒 仆舒 于亳亟舒仍亠仆仆� ���� 仗�仂亞�舒仄亳."
 
+#~ msgid "bug master"
+#~ msgstr "�仗亠��舒仍��� 亰 于舒亟"
+
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "�于�仂仄舒�亳�仆仂 于�亟�亳仍亳�亳 于�亟 从仂�亳���于舒��于, �从� 仆亠 于 仗亠�亠仍�从� 从仂仆�舒从��于"
+
 #~ msgid "Error requesting %s"
 #~ msgstr "�仂仄亳仍从舒 亰舒仗亳�� %s"
--- a/po/zh_CN.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/zh_CN.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,17 +1,18 @@
+# Chinese (China) translation of Pidgin.
 # Pidgin 莉�散����膊�篏�筝㊥��膺肢���
-# Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
 # This file is distributed under the same license as the pidgin package.
 # Funda Wang <fundawang@linux.net.cn>, 2003, 2004.
-# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010.
 # fujianwzh <fujianwzh@gmail.com>, 2009.
 # liyuekui <liyuekui@gmail.com>, 2009.
+# Aron Xu <happyaron.xu@gmail.com>, 2009, 2010, 2011.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: pidgin HEAD\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-10-10 16:18+0800\n"
+"POT-Creation-Date: 2011-03-10 02:26-0800\n"
+"PO-Revision-Date: 2011-03-10 18:20+0800\n"
 "Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
@@ -1697,7 +1698,7 @@
 #. Scheme name
 #. Pool name
 msgid "SSL Peers Cache"
-msgstr ""
+msgstr "SSL 腴��合�絖�"
 
 #. Make messages
 #, c-format
@@ -2124,7 +2125,7 @@
 msgstr "膾�����"
 
 msgid "Old flat format"
-msgstr ""
+msgstr "�у�綛恰�贋�弱�"
 
 msgid "Logging of this conversation failed."
 msgstr "莅医�罩ゅ�莚���紊沿乾��"
@@ -2269,8 +2270,10 @@
 "篆�絖���篁句��莊��\n"
 "(莚傑�箴�絎��頑君緇�)"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "������膸�筝���ソ����茵�賢�����欠��莚傑�"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr "筝���ソ����茵�����篋阪��ユ��篁銀���莚傑��駈�"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2282,6 +2285,9 @@
 msgid "Create a new directory for each user"
 msgstr "筝堺�筝����桁��綮堺�亥���"
 
+msgid "Escape the filenames"
+msgstr "��羔���篁�"
+
 msgid "Notes"
 msgstr "紊�羈�"
 
@@ -2622,7 +2628,7 @@
 msgstr "胼紫鎖羔���─��"
 
 msgid "Save messages sent to an offline user as pounce."
-msgstr ""
+msgstr "絨�����膸�胼紫鎖絅遵���羔����臀�減絅遵������若��"
 
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
@@ -2648,10 +2654,10 @@
 msgstr "��"
 
 msgid "Save offline messages in pounce"
-msgstr ""
+msgstr "篆�絖�胼紫鎖筝阪ソ��������"
 
 msgid "Do not ask. Always save in pounce."
-msgstr ""
+msgstr "筝�荀�莚∫����紙���絖�筝阪ソ�������若��"
 
 msgid "One Time Password"
 msgstr "筝�罨≧�у���"
@@ -3095,9 +3101,7 @@
 msgstr "UIN"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "��"
 
@@ -3673,7 +3677,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "���≦����荀������絲�羌�筝�篏睡��痕�����莚�"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "���≦������綺�������"
 
@@ -3751,9 +3758,8 @@
 msgid "Unable to canonicalize password"
 msgstr "��羈�絲劫���菴�茵�茹�����紊���"
 
-#, fuzzy
 msgid "Malicious challenge from server"
-msgstr "���≦������������"
+msgstr "�倶�������������"
 
 msgid "Unexpected response from server"
 msgstr "篁����≦���九�遺��鎀�����綺�"
@@ -3809,7 +3815,6 @@
 msgid "Postal Code"
 msgstr "���睡���"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "�遵�"
 
@@ -4057,9 +4062,8 @@
 msgid "Invalid XMPP ID"
 msgstr "���� XMPP ID"
 
-#, fuzzy
 msgid "Invalid XMPP ID. Username portion must be set."
-msgstr "������ XMPP ID�����蕁肢�臀�������������"
+msgstr "������ XMPP ID�����蕁肢�臀������桁����"
 
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "������ XMPP ID�����蕁肢�臀�������������"
@@ -4691,7 +4695,7 @@
 
 #, c-format
 msgid "Please select the resource of %s to which you would like to send a file"
-msgstr ""
+msgstr "莚潔�������������篁句�� %s ��篏睡����莎�羣� ID"
 
 msgid "Afraid"
 msgstr "絎恰��"
@@ -4834,7 +4838,6 @@
 msgid "Indignant"
 msgstr "�ゆ��"
 
-#, fuzzy
 msgid "Interested"
 msgstr "�頑僑"
 
@@ -5217,28 +5220,23 @@
 msgid "Set friendly name for %s."
 msgstr "筝� %s 莅丞舟��絅遵��腱違��"
 
-#, fuzzy
 msgid "Set Friendly Name"
-msgstr "莅丞舟��絅順����腱�..."
+msgstr "莅丞舟��絅順����腱�"
 
 msgid "This is the name that other MSN buddies will see you as."
 msgstr "菴����銀��� MSN 絅遵����亥����絖���"
 
-#, fuzzy
 msgid "This Location"
-msgstr "���隙�臀�"
-
-#, fuzzy
+msgstr "菴�筝��臀�"
+
 msgid "This is the name that identifies this location"
-msgstr "菴����銀��� MSN 絅遵����亥����絖���"
-
-#, fuzzy
+msgstr "菴������④篏�臀�����腱�"
+
 msgid "Other Locations"
-msgstr "���隙�臀�"
-
-#, fuzzy
+msgstr "�銀�篏�臀�"
+
 msgid "You can sign out from other locations here"
-msgstr "�����九�篏�臀���④���桁���糸�篋���"
+msgstr "���札��������阪���銀�篏�臀����脂����"
 
 #. TODO: Due to limitations in our current request field API, the
 #. following string will show up with a trailing colon.  This should
@@ -5246,13 +5244,11 @@
 #. a separate purple_request_field_label_new_without_colon function,
 #. or by never automatically adding the colon and requiring that
 #. callers add the colon themselves.
-#, fuzzy
 msgid "You are not signed in from any other locations."
-msgstr "�����九�篏�臀���④���桁���糸�篋���"
-
-#, fuzzy
+msgstr "�����銀�篏�臀����脂����綏臥���冴��"
+
 msgid "Allow multiple logins?"
-msgstr "��莅梧�茵�紊�筝��箴�"
+msgstr "��莅後��合�脂��鐚�"
 
 msgid ""
 "Do you want to allow or disallow connecting from multiple locations "
@@ -5344,9 +5340,8 @@
 msgid "Set Friendly Name..."
 msgstr "莅丞舟��絅順����腱�..."
 
-#, fuzzy
 msgid "View Locations..."
-msgstr "�����臀�..."
+msgstr "�ョ��篏�臀�..."
 
 msgid "Set Home Phone Number..."
 msgstr "莅丞舟絎九梱�笈��欠��..."
@@ -5360,9 +5355,8 @@
 msgid "Enable/Disable Mobile Devices..."
 msgstr "����/胼���Щ���紊�..."
 
-#, fuzzy
 msgid "Allow/Disallow Multiple Logins..."
-msgstr "��莅�/胼�罩∝Щ�����..."
+msgstr "��莅�/胼�罩√��合�脂��..."
 
 msgid "Allow/Disallow Mobile Pages..."
 msgstr "��莅�/胼�罩∝Щ�����..."
@@ -5577,7 +5571,7 @@
 msgstr "��莅悟�頑�"
 
 msgid "Allow connecting from multiple locations"
-msgstr ""
+msgstr "��莅娯�紊�筝��臀��脂��"
 
 msgid "nudge: nudge a user to get their attention"
 msgstr "nudge鐚������桁�����������篁ヤ梢綣�莎隙���羈���"
@@ -5854,6 +5848,9 @@
 msgid "Connecting..."
 msgstr "罩e�����..."
 
+msgid "The Display Name you entered is too short."
+msgstr "����ョ���丞ず��腱医お�㏍��"
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "����ョ�� PIN �水墾���� [7-10]��"
 
@@ -5924,33 +5921,6 @@
 msgid "Retrieving User Information..."
 msgstr "罩e���膣∝���隙拭��..."
 
-msgid "Loading menu..."
-msgstr "罩e��十�ヨ���..."
-
-msgid "Status Message"
-msgstr "�倶��羔���"
-
-msgid "Rejection Message"
-msgstr "��膸�羔���"
-
-#. hidden number
-msgid "Hidden Number"
-msgstr "����埇��"
-
-msgid "Your MXit ID..."
-msgstr "���� MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP ���≦��"
-
-msgid "Connect via HTTP"
-msgstr "��菴� HTTP 菴���"
-
-msgid "Enable splash-screen popup"
-msgstr "�����羣�絮鎶�"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "��群茴�権�堺④ MultiMX��"
@@ -5965,6 +5935,44 @@
 msgid "You have invited"
 msgstr "��群��莚�"
 
+msgid "Loading menu..."
+msgstr "罩e��十�ヨ���..."
+
+msgid "Status Message"
+msgstr "�倶��羔���"
+
+msgid "Rejection Message"
+msgstr "��膸�羔���"
+
+#. hidden number
+msgid "Hidden Number"
+msgstr "����埇��"
+
+msgid "No profile available"
+msgstr "��������臀���篁�"
+
+#, fuzzy
+msgid "This contact does not have a profile."
+msgstr "罩ゅ��傑押�������球���散��"
+
+msgid "Your MXit ID..."
+msgstr "���� MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "���育��莚�"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP ���≦��"
+
+msgid "Connect via HTTP"
+msgstr "��菴� HTTP 菴���"
+
+msgid "Enable splash-screen popup"
+msgstr "�����羣�絮鎶�"
+
 msgid "Last Online"
 msgstr "������鎖"
 
@@ -6358,15 +6366,15 @@
 
 #. Slap means "to hit someone with an open/flat hand"
 msgid "Slap"
-msgstr ""
+msgstr "����"
 
 #, c-format
 msgid "%s has slapped you!"
-msgstr ""
+msgstr "%s ��篋�篏�筝�筝�鐚�"
 
 #, c-format
 msgid "Slapping %s..."
-msgstr ""
+msgstr "��筝�筝� %s..."
 
 #. Goose means "to pinch someone on their butt"
 msgid "Goose"
@@ -6697,7 +6705,7 @@
 msgid ""
 "You required encryption in your account settings, but one of the servers "
 "doesn't support it."
-msgstr ""
+msgstr "������決�臀�賢荀�羆���絲�鐚�篏���菴��ョ�����≦��賢��筝�筝��������絲���"
 
 #. Note to translators: The first %s is a URL, the second is an
 #. error message.
@@ -6705,9 +6713,8 @@
 msgid "Error requesting %s: %s"
 msgstr "莚傑� %s �九�咲��鐚�%s"
 
-#, fuzzy
 msgid "The server returned an empty response"
-msgstr "��羈�菴��ワ����≦�����腥阪��綺���"
+msgstr "���≦�����腥阪��綺�"
 
 msgid ""
 "Server requested that you fill out a CAPTCHA in order to sign in, but this "
@@ -7180,6 +7187,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "��群膸���筝���紊�� %s ��菴��ャ��"
 
+msgid "The new formatting is invalid."
+msgstr "�井�弱���������"
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "���桁���弱������贋�劫ぇ����腥堺�若��"
+
 msgid "Pop-Up Message"
 msgstr "綣劫�堺���"
 
@@ -7415,12 +7428,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ ��腱���蕁�"
 
-msgid "The new formatting is invalid."
-msgstr "�井�弱���������"
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "���桁���弱������贋�劫ぇ����腥堺�若��"
-
 msgid "Change Address To:"
 msgstr "絨��医���贋�剛減鐚�"
 
@@ -7463,13 +7470,11 @@
 msgid "Set Privacy Options..."
 msgstr "莅丞舟��腱���蕁�..."
 
-#, fuzzy
 msgid "Show Visible List"
-msgstr "�丞ず絅遵���茵�(_L)"
-
-#, fuzzy
+msgstr "�丞ず�����茵�"
+
 msgid "Show Invisible List"
-msgstr "��莚桁��茵�"
+msgstr "�丞ず�����茵�"
 
 #. AIM actions
 msgid "Confirm Account"
@@ -7487,9 +7492,8 @@
 msgid "Search for Buddy by Email Address..."
 msgstr "���球���散��膣√ソ��..."
 
-#, fuzzy
 msgid "Don't use encryption"
-msgstr "��荀���絲�"
+msgstr "筝�篏睡����絲�"
 
 msgid "Use clientLogin"
 msgstr "篏睡����欠��糸�"
@@ -7529,75 +7533,6 @@
 "�医����荀���犬�域�膊��坂��翫産腴��贋・菴��ワ�菴�絲剛��恰�銀����上����荀�����篏����絨���"
 "�我���� IP �医��鐚���篁ュ��初����羹�������腱�蕋�����"
 
-msgid "Invalid SNAC"
-msgstr "���� SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr ""
-
-msgid "Client rate limit exceeded"
-msgstr ""
-
-msgid "Service unavailable"
-msgstr "���>�����"
-
-msgid "Service not defined"
-msgstr "���≧���箙�"
-
-msgid "Obsolete SNAC"
-msgstr "綺��� SNAC"
-
-msgid "Not supported by host"
-msgstr "筝紙�坂�����"
-
-msgid "Not supported by client"
-msgstr "絎∽�隙�����"
-
-msgid "Refused by client"
-msgstr "絎∽�傑��膸�"
-
-msgid "Reply too big"
-msgstr "��紊�紊�ぇ"
-
-msgid "Responses lost"
-msgstr "��綺�筝√け"
-
-msgid "Request denied"
-msgstr "莚傑�茴��罩�"
-
-msgid "Busted SNAC payload"
-msgstr "SNAC ����茣�莉醇�紜�"
-
-msgid "Insufficient rights"
-msgstr "����筝�紊�"
-
-msgid "In local permit/deny"
-msgstr "���域���/胼�罩�"
-
-msgid "Warning level too high (sender)"
-msgstr "������茘���膾у���蕭�"
-
-msgid "Warning level too high (receiver)"
-msgstr "�ユ�区��茘���膾у���蕭�"
-
-msgid "User temporarily unavailable"
-msgstr "���隙鹸�銀�����"
-
-msgid "No match"
-msgstr "���拷��"
-
-msgid "List overflow"
-msgstr "��茵�頃��"
-
-msgid "Request ambiguous"
-msgstr "莚傑����"
-
-msgid "Queue full"
-msgstr "����羯�"
-
-msgid "Not while on AOL"
-msgstr "筝�篏�篋� AOL 筝�"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "���桁ご��"
@@ -7716,36 +7651,102 @@
 msgid "Capabilities"
 msgstr "絎拷��"
 
+msgid "Invalid SNAC"
+msgstr "���� SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr ""
+
+msgid "Client rate limit exceeded"
+msgstr ""
+
+msgid "Service unavailable"
+msgstr "���>�����"
+
+msgid "Service not defined"
+msgstr "���≧���箙�"
+
+msgid "Obsolete SNAC"
+msgstr "綺��� SNAC"
+
+msgid "Not supported by host"
+msgstr "筝紙�坂�����"
+
+msgid "Not supported by client"
+msgstr "絎∽�隙�����"
+
+msgid "Refused by client"
+msgstr "絎∽�傑��膸�"
+
+msgid "Reply too big"
+msgstr "��紊�紊�ぇ"
+
+msgid "Responses lost"
+msgstr "��綺�筝√け"
+
+msgid "Request denied"
+msgstr "莚傑�茴��罩�"
+
+msgid "Busted SNAC payload"
+msgstr "SNAC ����茣�莉醇�紜�"
+
+msgid "Insufficient rights"
+msgstr "����筝�紊�"
+
+msgid "In local permit/deny"
+msgstr "���域���/胼�罩�"
+
+msgid "Warning level too high (sender)"
+msgstr "������茘���膾у���蕭�"
+
+msgid "Warning level too high (receiver)"
+msgstr "�ユ�区��茘���膾у���蕭�"
+
+msgid "User temporarily unavailable"
+msgstr "���隙鹸�銀�����"
+
+msgid "No match"
+msgstr "���拷��"
+
+msgid "List overflow"
+msgstr "��茵�頃��"
+
+msgid "Request ambiguous"
+msgstr "莚傑����"
+
+msgid "Queue full"
+msgstr "����綏我察"
+
+msgid "Not while on AOL"
+msgstr "筝�篏�篋� AOL 筝�"
+
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear online to the chosen user even when your status is set to
 #. Invisible.
 msgid "Appear Online"
-msgstr "�丞ず筝阪��鎖"
+msgstr "絲劫�狗��荳���"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user when your status is set to
 #. Invisible (this is the default).
-#, fuzzy
 msgid "Don't Appear Online"
-msgstr "�丞ず筝阪��鎖"
+msgstr "絲劫�九��鎖筝����"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to always appear offline to the chosen user (even when your status
 #. isn't Invisible).
 msgid "Appear Offline"
-msgstr "�丞ず筝榊�膾�"
+msgstr "絲劫�狗��荳�"
 
 #. Translators: This string is a menu option that, if selected, will cause
 #. you to appear offline to the chosen user if you are invisible, and
 #. appear online to the chosen user if you are not invisible (this is the
 #. default).
-#, fuzzy
 msgid "Don't Appear Offline"
-msgstr "�丞ず筝榊�膾�"
-
-#, fuzzy
+msgstr "絲劫�九��鎖���"
+
 msgid "you have no buddies on this list"
-msgstr "��群茴�権�堺④ MultiMX��"
+msgstr "罩ゅ��茵�賢羃≧��絅遵�"
 
 #, fuzzy, c-format
 msgid ""
@@ -7755,16 +7756,14 @@
 "絋������活���菴�篋�絅遵����域�羆�莅よ�鐚�����������渇�����肢�篋�絅遵�鐚��九�����獅�����域�"
 "羆�莅よ�����"
 
-#, fuzzy
 msgid "Visible List"
-msgstr "���"
+msgstr "��荳�����茵�"
 
 msgid "These buddies will see your status when you switch to \"Invisible\""
 msgstr ""
 
-#, fuzzy
 msgid "Invisible List"
-msgstr "��莚桁��茵�"
+msgstr "��荳���茵�"
 
 msgid "These buddies will always see you as offline"
 msgstr ""
@@ -8312,14 +8311,14 @@
 msgid "Select Server"
 msgstr "�������≦��"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "��菴� TCP 菴���"
@@ -8333,6 +8332,9 @@
 msgid "Show chat room when msg comes"
 msgstr "綵�羔����井�ユ�倶�丞ず��紊��"
 
+msgid "Use default font"
+msgstr "篏睡���莅ゅ�篏�"
+
 msgid "Keep alive interval (seconds)"
 msgstr "篆�����鎖�顔��(腱�)"
 
@@ -9322,7 +9324,7 @@
 msgstr "��羈���罩紫����"
 
 msgid "WATCH"
-msgstr ""
+msgstr "��茹�"
 
 msgid "Cannot watch user"
 msgstr "��羈���茹�����訓"
@@ -9880,7 +9882,7 @@
 msgstr "list鐚� ���� Yahoo 臀�膸�筝�����紊��"
 
 msgid "doodle: Request user to start a Doodle session"
-msgstr ""
+msgstr "doodle: 莚傑����桁�紮�筝�筝� Doodle 篌�莚�"
 
 msgid "Yahoo ID..."
 msgstr "Yahoo ID..."
@@ -9914,7 +9916,7 @@
 msgstr "綽順�ヤ�莅�����紊����莚�"
 
 msgid "Use account proxy for HTTP and HTTPS connections"
-msgstr ""
+msgstr "筝� HTTP �� HTTPS 菴��ヤ戎����隙撮��"
 
 msgid "Chat room list URL"
 msgstr "��紊���紊����茵� URL"
@@ -10021,12 +10023,14 @@
 
 #, c-format
 msgid "Unknown error 52.  Reconnecting should fix this."
-msgstr ""
+msgstr "���ラ��莚� 52�����域��ュ���札篆��罩ら�����"
 
 msgid ""
 "Error 1013: The username you have entered is invalid.  The most common cause "
 "of this error is entering your email address instead of your Yahoo! ID."
 msgstr ""
+"��莚� 1013: ����ョ�����桁����������絽梧������醇������ヤ��球���散�医��鐚���羃≧��莨�"
+"�� Yahoo! ID��"
 
 #, c-format
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
@@ -10062,7 +10066,7 @@
 msgid ""
 "Unable to connect: The server's response did not contain the necessary "
 "information"
-msgstr ""
+msgstr "��羈�菴��ワ����≦����綺�筝㊦失絨�綽�荀�篆≧��"
 
 msgid "Not at Home"
 msgstr "筝����"
@@ -10228,7 +10232,7 @@
 msgid ""
 "Unknown error. You may need to logout and wait five minutes before being "
 "able to rejoin a chatroom"
-msgstr ""
+msgstr "���ラ��莚�������初��荀����阪��桁攻膈�緇�篋����������医���ヨ��紊��"
 
 #, c-format
 msgid "You are now chatting in %s."
@@ -10494,7 +10498,7 @@
 msgstr "菴�菴�胼糸�"
 
 msgid "Feeling"
-msgstr ""
+msgstr "����筝医�"
 
 #, c-format
 msgid "%s (%s) changed status from %s to %s"
@@ -10587,6 +10591,7 @@
 "Unable to allocate enough memory to hold the contents from %s.  The web "
 "server may be trying something malicious."
 msgstr ""
+"��羈�筝堺�ヨ�� %s ����絎劫����莇喝�����絖���臀�蕁究���≦������醇③���ц���罩e幻��篏���"
 
 #, c-format
 msgid "Error reading from %s: %s"
@@ -10640,7 +10645,7 @@
 
 msgid ""
 "Chat over IM.  Supports AIM, Google Talk, Jabber/XMPP, MSN, Yahoo and more"
-msgstr ""
+msgstr "篋���臀���莅��綺�� ���� AIM��Google Talk��Jabber/XMPP��MSN��Yahoo ���翫�"
 
 msgid "Internet Messenger"
 msgstr "篋���臀���莅��綺�"
@@ -10783,7 +10788,7 @@
 msgstr "�桁�"
 
 msgid "The layout of icons, name, and status of the buddy list"
-msgstr ""
+msgstr "�丈������腱医��絅遵���茵��倶�����桁�"
 
 #. Group
 #. Note to translators: These two strings refer to the background color
@@ -10792,7 +10797,7 @@
 msgstr "�������"
 
 msgid "The background color of an expanded group"
-msgstr ""
+msgstr "���膸����������"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list group when in its expanded state
@@ -10838,26 +10843,26 @@
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is online
 msgid "Online Text"
-msgstr "��鎖��絖�"
+msgstr "��鎖����"
 
 msgid "The text information for when a buddy is online"
-msgstr "綵�筝�篏�絅遵�筝�膾炊�倶�丞ず����絖�篆≧��"
+msgstr "綵�絅遵�筝�膾炊�倶�丞ず������拭��"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is away
 msgid "Away Text"
-msgstr "胼糸���絖�"
+msgstr "胼糸�����"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
+msgstr "綵�絅遵�胼糸��倶�丞ず������拭��"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is offline
 msgid "Offline Text"
-msgstr "胼紫鎖��絖�"
+msgstr "胼紫鎖����"
 
 msgid "The text information for when a buddy is offline"
-msgstr ""
+msgstr "綵�絅遵�胼紫鎖�倶�丞ず������拭��"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when it is idle
@@ -10865,7 +10870,7 @@
 msgstr "������絖�"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
+msgstr "綵�絅遵������倶�丞ず������拭��"
 
 #. Note to translators: These two strings refer to the font and color
 #. of a buddy list buddy when they have sent you a new message
@@ -11183,7 +11188,7 @@
 
 #, c-format
 msgid "Idle %dd %dh %02dm"
-msgstr "����筝� (%d紊�%d絨��%02d��)"
+msgstr "����(%d鎀�%d絨��%02d��)"
 
 #, c-format
 msgid "Idle %dh %02dm"
@@ -11738,9 +11743,6 @@
 msgid "Fatal Error"
 msgstr "�吓�初��莚�"
 
-msgid "bug master"
-msgstr "Bug 筝紫�"
-
 msgid "artist"
 msgstr "臂�轡"
 
@@ -11921,6 +11923,10 @@
 msgid "Maithili"
 msgstr "�������莚�"
 
+#, fuzzy
+msgid "Meadow Mari"
+msgstr "�育��散"
+
 msgid "Macedonian"
 msgstr "薊��狗/莚�"
 
@@ -12056,6 +12062,9 @@
 "Channel: #pidgin on irc.freenode.net<BR>\tXMPP MUC: devel@conference.pidgin."
 "im<BR><BR>"
 msgstr ""
+"<FONT SIZE=\"4\"><B>������莎�羣�</B></FONT><BR>\t<A HREF=\"%s\">臀�腴�</A><BR>"
+"\t<A HREF=\"%s\">絽梧����</A><BR>\tIRC 蘂���鐚�#pidgin (irc.freenode.net)<BR>"
+"\tXMPP MUC: devel@conference.pidgin.im<BR><BR>"
 
 #, c-format
 msgid ""
@@ -12605,10 +12614,10 @@
 "\n"
 
 msgid "DIR"
-msgstr ""
+msgstr "���"
 
 msgid "use DIR for config files"
-msgstr ""
+msgstr "篏睡����絎����篏�筝咲��臀���篁句���"
 
 msgid "print debugging messages to stdout"
 msgstr "���域�莚�篆≧���井����莨���"
@@ -12626,7 +12635,7 @@
 msgstr "筝������糸�"
 
 msgid "NAME"
-msgstr ""
+msgstr "��腱�"
 
 msgid ""
 "enable specified account(s) (optional argument NAME\n"
@@ -12655,6 +12664,16 @@
 "how to get the backtrace, please read the instructions at\n"
 "%swiki/GetABacktrace\n"
 msgstr ""
+"%s %s ����篋�罧級��莚�攻綏峨�莚�菴�茵��後�莉����井��篁吟��\n"
+"菴���蒐篁句失�傑��絲取�雁�����鐚�筝�������紊沿����眼��\n"
+"\n"
+"絋������醇�上�育���医刊羣����隙�罩ラ�鐚�莚傑����菴�篁ヤ��医����篋ょ失�傑�ュ��鐚�\n"
+"篁ヤ梢綣���篋阪�����九�藹�菴�茵�篆��鐚�\n"
+"%ssimpleticket/\n"
+"\n"
+"莚決�膸�莚贋����倶��③���ц�����篏�鐚�綛九���倶�箴�莉������後���篁句����羣�拭����\n"
+"絋�������ラ��絋�篏��桁���羣�拭���莚桁���鐚�\n"
+"%swiki/GetABacktrace\n"
 
 #, c-format
 msgid "Exiting because another libpurple client is already running.\n"
@@ -12717,6 +12736,13 @@
 msgid "New Pounces"
 msgstr "絅遵������惹�腓�"
 
+#. Translators: Make sure you translate "Dismiss" differently than
+#. "close"!  This string is used in the "You have pounced" dialog
+#. that appears when one of your Buddy Pounces is triggered.  In
+#. this context "Dismiss" means "I acknowledge that I've seen that
+#. this pounce was triggered--remove it from this list."  Translating
+#. it as "Remove" is acceptable if you can't think of a more precise
+#. word.
 msgid "Dismiss"
 msgstr "綽順��"
 
@@ -13099,7 +13125,7 @@
 msgstr "Konqueror"
 
 msgid "Google Chrome"
-msgstr ""
+msgstr "Google Chrome"
 
 #. Do not move the line below.  Code below expects gnome-open to be in
 #. * this list immediately after xdg-open!
@@ -13123,11 +13149,11 @@
 
 #. Translators: please do not translate "chromium-browser" here!
 msgid "Chromium (chromium-browser)"
-msgstr ""
+msgstr "Chromium (chromium-browser)"
 
 #. Translators: please do not translate "chrome" here!
 msgid "Chromium (chrome)"
-msgstr ""
+msgstr "Chromium (chrome)"
 
 msgid "Manual"
 msgstr "��綏ヨ�臀�"
@@ -13438,7 +13464,7 @@
 #, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
-msgstr ""
+msgstr "���箙�茵��� %s 綏峨����莚隙戎���銀�綽��傑�劫���"
 
 msgid "Custom Smiley"
 msgstr "���箙�茵���"
@@ -13493,7 +13519,7 @@
 msgstr "Google Talk"
 
 msgid "Facebook (XMPP)"
-msgstr ""
+msgstr "Facebook (XMPP)"
 
 #, c-format
 msgid "The following error has occurred loading %s: %s"
@@ -14447,6 +14473,8 @@
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
+"��膤私査�丈��/\n"
+"����篋阪�丈��"
 
 msgid "Icon for Chat"
 msgstr "��紊��丈��"
@@ -14809,7 +14837,7 @@
 
 #. Installer Subsection Text
 msgid "Debug Symbols (for reporting crashes)"
-msgstr ""
+msgstr "莪�莚�膃��(����ュ��經����莚�)"
 
 #. Installer Subsection Text
 msgid "Desktop"
@@ -14821,12 +14849,16 @@
 "function; if retrying fails, you may need to use the 'Offline Installer' "
 "from http://pidgin.im/download/windows/ ."
 msgstr ""
+"筝�莉� GTK+ 菴�茵���($R2)�咲����$\\rPidgin ��荀�絎��劫�轡篏�鐚�絋�����莚�篁��九け茣ワ�����"
+"���初��荀�篏睡���膾水�茖�腮�綺� http://pidgin.im/download/windows/"
 
 #. $R2 will display the URL that the Debug Symbols failed to download from
 msgid ""
 "Error Installing Debug Symbols ($R2).$\\rIf retrying fails, you may need to "
 "use the 'Offline Installer' from http://pidgin.im/download/windows/ ."
 msgstr ""
+"絎�茖�莪�莚�膃��($R2)�尌����$\\r絋�����莚�篁��九け茣ワ�������初��荀�篏睡���膾水�茖�腮�綺� "
+"http://pidgin.im/download/windows/"
 
 #. $R3 will display the URL that the Dictionary failed to download from
 #, no-c-format
@@ -14835,6 +14867,9 @@
 "installation instructions are at: http://developer.pidgin.im/wiki/Installing"
 "%20Pidgin#manual_win32_spellcheck_installation"
 msgstr ""
+"絎�茖��弱��罍��ュ����($R3)紊沿乾��$\\r絋�����莚�篁��九け茣ワ����札������綏ュ�茖� http://"
+"developer.pidgin.im/wiki/Installing"
+"%20Pidgin#manual_win32_spellcheck_installation"
 
 #. Installer Subsection Text
 msgid "GTK+ Runtime (required if not present)"
@@ -14857,6 +14892,8 @@
 "already present).$\\rAre you sure you want to skip installing the GTK+ "
 "Runtime?"
 msgstr ""
+"Pidgin ��荀�筝�筝��弱��� GTK+ 菴�茵���(����膤紫�筝�羃≧��絎�茖�)��$\\r��`絎�筝�絎�茖� GTK+ "
+"菴�茵��九��鐚�"
 
 #. Installer Subsection Text
 msgid "Shortcuts"
@@ -14894,15 +14931,21 @@
 msgid ""
 "Unable to uninstall the currently installed version of Pidgin. The new "
 "version will be installed without removing the currently installed version."
-msgstr ""
+msgstr "��羈��梧十綏峨�茖������� Pidgin鐚��亥��絨�筝����ゅ群����篁区���贋・絎�茖���"
 
 #. Text displayed on Installer Finish Page
 msgid "Visit the Pidgin Web Page"
-msgstr "羌頵� Pidgin 臀�蕁�"
+msgstr "莅翠�� Pidgin 臀�腴�"
 
 msgid "You do not have permission to uninstall this application."
 msgstr "��押�������梧十罩ょ�綺��"
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "�Û����膸�筝���ソ����茵�賢�����欠��莚傑�"
+
+#~ msgid "bug master"
+#~ msgstr "Bug 筝紫�"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "��綣���篁倶�九���篋���莚���\n"
 
--- a/po/zh_HK.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/zh_HK.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,14 +1,14 @@
 # NOTE: This file is generated from zh_TW.po by mkzhhk.pl,v 1.27 2010/12/17 01:08:13 acli Exp
 # ---
 # Pidgin's Traditional Chinese translation
-# Copyright (C) 2002-2010, Paladin R. Liu <paladin@ms1.hinet.net>
-# Copyright (C) 2003-2010, Ambrose C. Li <ambrose.li@gmail.com>
+# Copyright (C) 2002-2011, Paladin R. Liu <paladin@ms1.hinet.net>
+# Copyright (C) 2003-2011, Ambrose C. Li <ambrose.li@gmail.com>
 #
 # PLEASE DO NOT ATTEMPT TO UPDATE THIS FILE IF THERE ARE NO
 # LINE NUMBERS (LINES BEGINNING WITH #:) IN THIS FILE.
 #
 # This file is distributed under the same license as the "Pidgin" package.
-# $InternalId: zh_TW.po,v 1.659 2010/12/17 03:16:38 acli Exp $
+# $InternalId: zh_TW.po,v 1.665 2011/03/09 21:33:34 acli Exp $
 #
 # ----------------------------------------------------------
 # For internal use only:
@@ -60,10 +60,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Pidgin 2.7.8\n"
+"Project-Id-Version: Pidgin 2.7.11\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-16 19:32-0500\n"
+"POT-Creation-Date: 2011-03-10 01:17-0800\n"
+"PO-Revision-Date: 2011-03-09 16:19-0500\n"
 "Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n"
 "Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
 "Language: zh_HK\n"
@@ -2439,8 +2439,10 @@
 "罟�罅��峨�莊��\n"
 "鐚�茫���箴�絎��頑君緇�鐚�"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "������腟���箴���ソ��羝���賢��篏睡����"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr "�銀���筝����絅遵�羝����х��篏睡����荀�羆�罟�罅��活叱��"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2453,6 +2455,9 @@
 msgid "Create a new directory for each user"
 msgstr "腟����篏睡����綮榊�荅俄戎����絨��������"
 
+msgid "Escape the filenames"
+msgstr "�後�堺�罅���腮延賢���劫�ュ�膃�"
+
 msgid "Notes"
 msgstr "��荐�"
 
@@ -3300,9 +3305,7 @@
 msgstr "絽活��"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "��"
 
@@ -3920,7 +3923,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "篌堺������荀�膓��掩�����絲���筝我��画�����茯�茘�"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "篌堺������箴�篋��≧��������"
 
@@ -4062,7 +4068,6 @@
 msgid "Postal Code"
 msgstr "�級��膩���"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "��絎�"
 
@@ -6366,6 +6371,9 @@
 msgid "Connecting..."
 msgstr "�g�筝�..."
 
+msgid "The Display Name you entered is too short."
+msgstr "篏���莠後�ョ��膓峨��紊��㏍��"
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "篏���莠後�ョ��絲�腆守���㊥�����件��桁墾���� 7 �� 10 ���後�鐚���"
 
@@ -6434,34 +6442,6 @@
 msgid "Retrieving User Information..."
 msgstr "莅���篏睡����莖�荐�筝�..."
 
-msgid "Loading menu..."
-msgstr "莠��ユ���賢..."
-
-msgid "Status Message"
-msgstr "����荐���"
-
-msgid "Rejection Message"
-msgstr "��腟�荐���"
-
-# NOTE �����������沿��嶒���腆種���箙��� - acli 20091127
-#. hidden number
-msgid "Hidden Number"
-msgstr "�沿��嶒���腆�"
-
-msgid "Your MXit ID..."
-msgstr "篏���MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP 篌堺����"
-
-msgid "Connect via HTTP"
-msgstr "篏睡�� HTTP �g�"
-
-msgid "Enable splash-screen popup"
-msgstr "�����������√��肴�腦�"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "篏�綏牙�緇�MultiMX筝㊧←荼√�冴��"
@@ -6477,6 +6457,46 @@
 msgid "You have invited"
 msgstr "篏���茫�篋�"
 
+msgid "Loading menu..."
+msgstr "莠��ユ���賢..."
+
+msgid "Status Message"
+msgstr "����荐���"
+
+msgid "Rejection Message"
+msgstr "��腟�荐���"
+
+# NOTE �����������沿��嶒���腆種���箙��� - acli 20091127
+#. hidden number
+msgid "Hidden Number"
+msgstr "�沿��嶒���腆�"
+
+# NOTE "Only MXit users have profiles" - 荀�腦�罔�蕁� - acli 20110309
+msgid "No profile available"
+msgstr "��篋肴���筝�絖���"
+
+# NOTE "Only MXit users have profiles" - ���荐��� - acli 20110309
+msgid "This contact does not have a profile."
+msgstr "����絽活��筝�絖����檎������篋肴�����"
+
+msgid "Your MXit ID..."
+msgstr "篏���MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "���育��茫�"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP 篌堺����"
+
+msgid "Connect via HTTP"
+msgstr "篏睡�� HTTP �g�"
+
+msgid "Enable splash-screen popup"
+msgstr "�����������√��肴�腦�"
+
 msgid "Last Online"
 msgstr "��菴�筝�膩�"
 
@@ -7759,6 +7779,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "篏�綏牙��沿��紊�� %s ��罩∫�g���"
 
+msgid "The new formatting is invalid."
+msgstr "�亥���弱����≧������"
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "絽活���弱������醇�壕�紊у�篁ュ�腥榊�純��"
+
 # XXX �����藝� (��綵≫��榊憟��)鐚� (絅遵���札��茘���荐��������e��??)
 msgid "Pop-Up Message"
 msgstr "綵��肴���"
@@ -8014,12 +8040,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ 腱��演�檎��"
 
-msgid "The new formatting is invalid."
-msgstr "�亥���弱����≧������"
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "絽活���弱������醇�壕�紊у�篁ュ�腥榊�純��"
-
 msgid "Change Address To:"
 msgstr "�贋�劫�医���削�"
 
@@ -8126,90 +8146,6 @@
 "����荀�羆�絨����������肢����綮榊�莎欠�贋・�g�鐚����������渇���恰��荐����������鏆�������"
 "��罔e������俄��� IP 篏���鐚���罩ゅ��醇����腱��掩�拷�∝��蘂�����"
 
-msgid "Invalid SNAC"
-msgstr "�≧���� SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "莇��坂�篌堺�����������筝���"
-
-msgid "Client rate limit exceeded"
-msgstr "莇��坂����句�������筝���"
-
-# NOTE SNAC ���篁g⊆5鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE ��篆���腟��篋�筝���綏峨�臂������� (Service, Family)鐚�篏�����腮����鐚�篌堺���������≧���箴�荅我����
-msgid "Service unavailable"
-msgstr "����筝�絖���"
-
-msgid "Service not defined"
-msgstr "�������臂�"
-
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Obsolete SNAC"
-msgstr "綏俄�綮∝����綣� SNAC"
-
-msgid "Not supported by host"
-msgstr "篌堺��������"
-
-msgid "Not supported by client"
-msgstr "���句�筝����"
-
-msgid "Refused by client"
-msgstr "頮����句���腟�"
-
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Reply too big"
-msgstr "����紊�ぇ"
-
-msgid "Responses lost"
-msgstr "�阪け����"
-
-msgid "Request denied"
-msgstr "茫�羆�茴���"
-
-# NOTE SNAC ���篁g⊆14 (0x0e)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚��� SNAC 莢�莠��у�榊憘��弱�筝������
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Busted SNAC payload"
-msgstr "�後���� SNAC 莢�莠�"
-
-msgid "Insufficient rights"
-msgstr "罨���筝�紊�"
-
-# NOTE SNAC ���篁g⊆16 (0x10)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "In local permit/deny"
-msgstr "�����亥�����荐縁���腟�羝�����"
-
-# NOTE SNAC ���篁g⊆17 (0x11)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
-msgid "Warning level too high (sender)"
-msgstr "鐚��守����鐚�茘���膈�膣����"
-
-# NOTE SNAC ���篁g⊆18 (0x12)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
-msgid "Warning level too high (receiver)"
-msgstr "鐚��ユ�区��鐚�茘���膈�膣����"
-
-msgid "User temporarily unavailable"
-msgstr "篏睡��������筝����筝�"
-
-msgid "No match"
-msgstr "羃����悟���荐���"
-
-# NOTE SNAC ���篁g⊆21 (0x15)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE OSCAR ��絎��喝���筝�腮���List��鐚�茘�����絅遵�羝��������巡�絨�
-msgid "List overflow"
-msgstr "羝���群羯�"
-
-msgid "Request ambiguous"
-msgstr "筝���∈��茫�羆�"
-
-msgid "Queue full"
-msgstr "篏���綏我賛"
-
-# NOTE SNAC ���篁g⊆24 (0x18)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE ���醇������ AOL 茖頳�羆�篋�筝�腮� ICQ ������
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Not while on AOL"
-msgstr "筝������� AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "絅遵���腓�"
@@ -8344,6 +8280,90 @@
 msgid "Capabilities"
 msgstr "�弱���"
 
+msgid "Invalid SNAC"
+msgstr "�≧���� SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "莇��坂�篌堺�����������筝���"
+
+msgid "Client rate limit exceeded"
+msgstr "莇��坂����句�������筝���"
+
+# NOTE SNAC ���篁g⊆5鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE ��篆���腟��篋�筝���綏峨�臂������� (Service, Family)鐚�篏�����腮����鐚�篌堺���������≧���箴�荅我����
+msgid "Service unavailable"
+msgstr "����筝�絖���"
+
+msgid "Service not defined"
+msgstr "�������臂�"
+
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Obsolete SNAC"
+msgstr "綏俄�綮∝����綣� SNAC"
+
+msgid "Not supported by host"
+msgstr "篌堺��������"
+
+msgid "Not supported by client"
+msgstr "���句�筝����"
+
+msgid "Refused by client"
+msgstr "頮����句���腟�"
+
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Reply too big"
+msgstr "����紊�ぇ"
+
+msgid "Responses lost"
+msgstr "�阪け����"
+
+msgid "Request denied"
+msgstr "茫�羆�茴���"
+
+# NOTE SNAC ���篁g⊆14 (0x0e)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚��� SNAC 莢�莠��у�榊憘��弱�筝������
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Busted SNAC payload"
+msgstr "�後���� SNAC 莢�莠�"
+
+msgid "Insufficient rights"
+msgstr "罨���筝�紊�"
+
+# NOTE SNAC ���篁g⊆16 (0x10)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "In local permit/deny"
+msgstr "�����亥�����荐縁���腟�羝�����"
+
+# NOTE SNAC ���篁g⊆17 (0x11)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
+msgid "Warning level too high (sender)"
+msgstr "鐚��守����鐚�茘���膈�膣����"
+
+# NOTE SNAC ���篁g⊆18 (0x12)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
+msgid "Warning level too high (receiver)"
+msgstr "鐚��ユ�区��鐚�茘���膈�膣����"
+
+msgid "User temporarily unavailable"
+msgstr "篏睡��������筝����筝�"
+
+msgid "No match"
+msgstr "羃����悟���荐���"
+
+# NOTE SNAC ���篁g⊆21 (0x15)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE OSCAR ��絎��喝���筝�腮���List��鐚�茘�����絅遵�羝��������巡�絨�
+msgid "List overflow"
+msgstr "羝���群羯�"
+
+msgid "Request ambiguous"
+msgstr "筝���∈��茫�羆�"
+
+msgid "Queue full"
+msgstr "篏���綏我賛"
+
+# NOTE SNAC ���篁g⊆24 (0x18)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE ���醇������ AOL 茖頳�羆�篋�筝�腮� ICQ ������
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Not while on AOL"
+msgstr "筝������� AOL"
+
 #  NOTE ������絖�筝峨�� Oscar (ICQ) ��茹i����④鐚�http://pidgin.im/pipermail/translators/2010-November/000554.html
 #  NOTE Oscar: ��絅遵��医��� Visible List ��
 #  NOTE Yahoo: �����冴���沿昆����鐚�絨�����絎���絅遵��援┗筝�膩�
@@ -8988,14 +9008,14 @@
 msgid "Select Server"
 msgstr "�御��篌堺����"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "篏睡�� TCP �g�"
@@ -9011,6 +9031,9 @@
 msgid "Show chat room when msg comes"
 msgstr "�九�域��紊��荐���������蕁�ず��紊��"
 
+msgid "Use default font"
+msgstr "篏睡����荐㊤���"
+
 # XXX 20080810 acli - 茘�����緇��拷�駕�����箙���
 msgid "Keep alive interval (seconds)"
 msgstr "罸��鎀�絨�腱����� Keep Alive"
@@ -12626,10 +12649,6 @@
 msgid "Fatal Error"
 msgstr "�顔�����荐���"
 
-# XXX ��⑮ - 20090226 acli
-msgid "bug master"
-msgstr "�ら��源膊�"
-
 # NOTE ������artist��鐚����ユ�弱�銀�����Artist��絖�筝駕�篆���荐㊧�pidgin��腓榊����graphic designer��鐚�腟�絨�筝���⑮������篋冴��
 msgid "artist"
 msgstr "綛渇�∵┃荐�"
@@ -12835,6 +12854,11 @@
 msgid "Maithili"
 msgstr "��������"
 
+#  NOTE 篁g⊆ mhr鐚�筝�腮����㊧�膤紫���掩�茯���鐚�膓㊤�榊�丞�茘���綛喝�育Μ��茯���
+#  XXX �鞘��井③綣���佂�h⑮��鐚����� http://zh.wikipedia.org/zh/薊���莚�
+msgid "Meadow Mari"
+msgstr "綛喝�育Μ����"
+
 #  NOTE��薤��狗���������腮��掩�茯���鐚�莊�絽�����薤��狗��筝��♂��篆�
 msgid "Macedonian"
 msgstr "薤��狗����"
@@ -16027,6 +16051,13 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "篏�羃���罨���腱脂�ょ�綣��"
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "�Û����腟���箴���ソ��羝���賢��篏睡����"
+
+# XXX ��⑮ - 20090226 acli
+#~ msgid "bug master"
+#~ msgstr "�ら��源膊�"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "絽九�т���腟�羌��活叱��筝㊦�主�����\n"
 
--- a/po/zh_TW.po	Mon Feb 21 23:08:47 2011 +0000
+++ b/po/zh_TW.po	Sun Mar 13 18:14:04 2011 +0000
@@ -1,12 +1,12 @@
 # Pidgin's Traditional Chinese translation
-# Copyright (C) 2002-2010, Paladin R. Liu <paladin@ms1.hinet.net>
-# Copyright (C) 2003-2010, Ambrose C. Li <ambrose.li@gmail.com>
+# Copyright (C) 2002-2011, Paladin R. Liu <paladin@ms1.hinet.net>
+# Copyright (C) 2003-2011, Ambrose C. Li <ambrose.li@gmail.com>
 #
 # PLEASE DO NOT ATTEMPT TO UPDATE THIS FILE IF THERE ARE NO
 # LINE NUMBERS (LINES BEGINNING WITH #:) IN THIS FILE.
 #
 # This file is distributed under the same license as the "Pidgin" package.
-# $InternalId: zh_TW.po,v 1.659 2010/12/17 03:16:38 acli Exp $
+# $InternalId: zh_TW.po,v 1.665 2011/03/09 21:33:34 acli Exp $
 #
 # ----------------------------------------------------------
 # For internal use only:
@@ -58,10 +58,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Pidgin 2.7.8\n"
+"Project-Id-Version: Pidgin 2.7.11\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 13:34-0500\n"
-"PO-Revision-Date: 2010-12-16 19:32-0500\n"
+"POT-Creation-Date: 2011-03-10 01:17-0800\n"
+"PO-Revision-Date: 2011-03-09 16:19-0500\n"
 "Last-Translator: Ambrose Li <ambrose.li@gmail.com>\n"
 "Language-Team: Chinese (Traditional) <zh-l10n@linux.org.tw>\n"
 "Language: zh_TW\n"
@@ -2437,8 +2437,10 @@
 "罟�罅��峨�莊��\n"
 "鐚�茫���箴�絎��頑君緇�鐚�"
 
-msgid "Automatically reject from users not in buddy list"
-msgstr "������腟���箴���ソ��羝���賢��篏睡����"
+msgid ""
+"When a file-transfer request arrives from a user who is\n"
+"*not* on your buddy list:"
+msgstr "�銀���筝�����ソ��羝����х��篏睡����荀�羆�罟�罅��活叱��"
 
 msgid ""
 "Notify with a popup when an autoaccepted file transfer is complete\n"
@@ -2451,6 +2453,9 @@
 msgid "Create a new directory for each user"
 msgstr "腟����篏睡����綮榊�荅俄戎����絨��������"
 
+msgid "Escape the filenames"
+msgstr "�後�堺�罅���腮延賢���劫�ュ���"
+
 msgid "Notes"
 msgstr "��荐�"
 
@@ -3298,9 +3303,7 @@
 msgstr "絽活��"
 
 #. first name
-#. purple_notify_user_info_add_pair( info, _( "Hidden Number" ), profile->hidden ? _( "Yes" ) : _( "No" ) );
 #. optional information
-#. purple_notify_user_info_add_pair( info, _( "Title" ), profile->title );
 msgid "First Name"
 msgstr "��"
 
@@ -3918,7 +3921,10 @@
 msgid "Server requires plaintext authentication over an unencrypted stream"
 msgstr "篌堺������荀�膓��掩�����絲���筝我��画�����茯�茘�"
 
-#. This should never happen!
+#. This happens when the server sends back jibberish
+#. * in the "additional data with success" case.
+#. * Seen with Wildfire 3.0.1.
+#.
 msgid "Invalid response from server"
 msgstr "篌堺������箴�篋��≧��������"
 
@@ -4060,7 +4066,6 @@
 msgid "Postal Code"
 msgstr "�級������"
 
-#. purple_notify_user_info_add_pair( info, _( "Email" ), profile->email );
 msgid "Country"
 msgstr "��絎�"
 
@@ -6364,6 +6369,9 @@
 msgid "Connecting..."
 msgstr "�g�筝�..."
 
+msgid "The Display Name you entered is too short."
+msgstr "����莠後�ョ���援┗紊��㏍��"
+
 msgid "The PIN you entered has an invalid length [7-10]."
 msgstr "����莠後�ョ��絲�腆守���㊥�����件��桁墾���� 7 �� 10 ���後�鐚���"
 
@@ -6432,34 +6440,6 @@
 msgid "Retrieving User Information..."
 msgstr "莅���篏睡����莖�荐�筝�..."
 
-msgid "Loading menu..."
-msgstr "莠��ユ���賢..."
-
-msgid "Status Message"
-msgstr "����荐���"
-
-msgid "Rejection Message"
-msgstr "��腟�荐���"
-
-# NOTE �����������沿��嶒���腆種���箙��� - acli 20091127
-#. hidden number
-msgid "Hidden Number"
-msgstr "�沿��嶒���腆�"
-
-msgid "Your MXit ID..."
-msgstr "����MXit ID..."
-
-#. Configuration options
-#. WAP server (reference: "libpurple/accountopt.h")
-msgid "WAP Server"
-msgstr "WAP 篌堺����"
-
-msgid "Connect via HTTP"
-msgstr "篏睡�� HTTP �g�"
-
-msgid "Enable splash-screen popup"
-msgstr "�����������√��肴�腦�"
-
 #. you were kicked
 msgid "You have been kicked from this MultiMX."
 msgstr "��群膓�緇�MultiMX筝㊧←荼√�冴��"
@@ -6475,6 +6455,46 @@
 msgid "You have invited"
 msgstr "����茫�篋�"
 
+msgid "Loading menu..."
+msgstr "莠��ユ���賢..."
+
+msgid "Status Message"
+msgstr "����荐���"
+
+msgid "Rejection Message"
+msgstr "��腟�荐���"
+
+# NOTE �����������沿��嶒���腆種���箙��� - acli 20091127
+#. hidden number
+msgid "Hidden Number"
+msgstr "�沿��嶒���腆�"
+
+# NOTE "Only MXit users have profiles" - 荀�腦�罔�蕁� - acli 20110309
+msgid "No profile available"
+msgstr "��篋肴���筝�絖���"
+
+# NOTE "Only MXit users have profiles" - ���荐��� - acli 20110309
+msgid "This contact does not have a profile."
+msgstr "����絽活��筝�絖����檎������篋肴�����"
+
+msgid "Your MXit ID..."
+msgstr "����MXit ID..."
+
+#. contact is in Deleted, Rejected or None state
+msgid "Re-Invite"
+msgstr "���育��茫�"
+
+#. Configuration options
+#. WAP server (reference: "libpurple/accountopt.h")
+msgid "WAP Server"
+msgstr "WAP 篌堺����"
+
+msgid "Connect via HTTP"
+msgstr "篏睡�� HTTP �g�"
+
+msgid "Enable splash-screen popup"
+msgstr "�����������√��肴�腦�"
+
 msgid "Last Online"
 msgstr "��緇�筝�膩�"
 
@@ -7757,6 +7777,12 @@
 msgid "You have been disconnected from chat room %s."
 msgstr "��群膓��沿��紊�� %s ��罩∫�g���"
 
+msgid "The new formatting is invalid."
+msgstr "�亥���弱����≧������"
+
+msgid "Username formatting can change only capitalization and whitespace."
+msgstr "絽活���弱������醇�壕�紊у�篁ュ�腥榊�純��"
+
 # XXX �����藝� (��綵≫��榊憟��)鐚� (絅遵���札��茘���荐��������e��??)
 msgid "Pop-Up Message"
 msgstr "綵��肴���"
@@ -8012,12 +8038,6 @@
 msgid "ICQ Privacy Options"
 msgstr "ICQ �援��檎��"
 
-msgid "The new formatting is invalid."
-msgstr "�亥���弱����≧������"
-
-msgid "Username formatting can change only capitalization and whitespace."
-msgstr "絽活���弱������醇�壕�紊у�篁ュ�腥榊�純��"
-
 msgid "Change Address To:"
 msgstr "莅��翫�医���削�"
 
@@ -8124,90 +8144,6 @@
 "����荀�羆�絨����������肢����綮榊�莎欠�贋・�g�鐚����������渇���恰��荐���襲�����鏆�������"
 "��罔e������我���� IP 篏���鐚���罩ゅ��醇�����援��拷�∝��蘂�����"
 
-msgid "Invalid SNAC"
-msgstr "�≧���� SNAC"
-
-msgid "Server rate limit exceeded"
-msgstr "莇��坂�篌堺�����������筝���"
-
-msgid "Client rate limit exceeded"
-msgstr "莇��坂����句�������筝���"
-
-# NOTE SNAC ���篁g⊆5鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE ��篆���腟��篋�筝���綏峨�臂������� (Service, Family)鐚�篏�����腮����鐚�篌堺���������≧���箴�荅我����
-msgid "Service unavailable"
-msgstr "����筝�絖���"
-
-msgid "Service not defined"
-msgstr "�������臂�"
-
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Obsolete SNAC"
-msgstr "綏俄�綮∝����綣� SNAC"
-
-msgid "Not supported by host"
-msgstr "篌堺��������"
-
-msgid "Not supported by client"
-msgstr "���句�筝����"
-
-msgid "Refused by client"
-msgstr "頮����句���腟�"
-
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Reply too big"
-msgstr "����紊�ぇ"
-
-msgid "Responses lost"
-msgstr "�阪け����"
-
-msgid "Request denied"
-msgstr "茫�羆�茴���"
-
-# NOTE SNAC ���篁g⊆14 (0x0e)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚��� SNAC 莢�莠��у�榊憘��弱�筝������
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Busted SNAC payload"
-msgstr "�後���� SNAC 莢�莠�"
-
-msgid "Insufficient rights"
-msgstr "罨���筝�紊�"
-
-# NOTE SNAC ���篁g⊆16 (0x10)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "In local permit/deny"
-msgstr "�����亥�����荐縁���腟�羝�����"
-
-# NOTE SNAC ���篁g⊆17 (0x11)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
-msgid "Warning level too high (sender)"
-msgstr "鐚��守����鐚�茘���膈�膣����"
-
-# NOTE SNAC ���篁g⊆18 (0x12)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
-msgid "Warning level too high (receiver)"
-msgstr "鐚��ユ�区��鐚�茘���膈�膣����"
-
-msgid "User temporarily unavailable"
-msgstr "篏睡��������筝����筝�"
-
-msgid "No match"
-msgstr "羃����悟���荐���"
-
-# NOTE SNAC ���篁g⊆21 (0x15)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE OSCAR ��絎��喝���筝�腮���List��鐚�茘�����絅遵�羝��������巡�絨�
-msgid "List overflow"
-msgstr "羝���群羯�"
-
-msgid "Request ambiguous"
-msgstr "筝���∈��茫�羆�"
-
-msgid "Queue full"
-msgstr "篏���綏我賛"
-
-# NOTE SNAC ���篁g⊆24 (0x18)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
-# NOTE ���醇������ AOL 茖頳�羆�篋�筝�腮� ICQ ������
-# XXX 茘�����緇��拷�� - acli 20100809
-msgid "Not while on AOL"
-msgstr "筝������� AOL"
-
 #. Label
 msgid "Buddy Icon"
 msgstr "絅遵���腓�"
@@ -8342,6 +8278,90 @@
 msgid "Capabilities"
 msgstr "�後���"
 
+msgid "Invalid SNAC"
+msgstr "�≧���� SNAC"
+
+msgid "Server rate limit exceeded"
+msgstr "莇��坂�篌堺�����������筝���"
+
+msgid "Client rate limit exceeded"
+msgstr "莇��坂����句�������筝���"
+
+# NOTE SNAC ���篁g⊆5鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE ��篆���腟��篋�筝���綏峨�臂������� (Service, Family)鐚�篏�����腮����鐚�篌堺���������≧���箴�荅我����
+msgid "Service unavailable"
+msgstr "����筝�絖���"
+
+msgid "Service not defined"
+msgstr "�������臂�"
+
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Obsolete SNAC"
+msgstr "綏俄�綮∝����綣� SNAC"
+
+msgid "Not supported by host"
+msgstr "篌堺��������"
+
+msgid "Not supported by client"
+msgstr "���句�筝����"
+
+msgid "Refused by client"
+msgstr "頮����句���腟�"
+
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Reply too big"
+msgstr "����紊�ぇ"
+
+msgid "Responses lost"
+msgstr "�阪け����"
+
+msgid "Request denied"
+msgstr "茫�羆�茴���"
+
+# NOTE SNAC ���篁g⊆14 (0x0e)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚��� SNAC 莢�莠��у�榊憘��弱�筝������
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Busted SNAC payload"
+msgstr "�後���� SNAC 莢�莠�"
+
+msgid "Insufficient rights"
+msgstr "罨���筝�紊�"
+
+# NOTE SNAC ���篁g⊆16 (0x10)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "In local permit/deny"
+msgstr "�����亥�����荐縁���腟�羝�����"
+
+# NOTE SNAC ���篁g⊆17 (0x11)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
+msgid "Warning level too high (sender)"
+msgstr "鐚��守����鐚�茘���膈�膣����"
+
+# NOTE SNAC ���篁g⊆18 (0x12)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html鐚���荀��銀�羔�����warning level����茘���
+msgid "Warning level too high (receiver)"
+msgstr "鐚��ユ�区��鐚�茘���膈�膣����"
+
+msgid "User temporarily unavailable"
+msgstr "篏睡��������筝����筝�"
+
+msgid "No match"
+msgstr "羃����悟���荐���"
+
+# NOTE SNAC ���篁g⊆21 (0x15)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE OSCAR ��絎��喝���筝�腮���List��鐚�茘�����絅遵�羝��������巡�絨�
+msgid "List overflow"
+msgstr "羝���群羯�"
+
+msgid "Request ambiguous"
+msgstr "筝���∈��茫�羆�"
+
+msgid "Queue full"
+msgstr "篏���綏我賛"
+
+# NOTE SNAC ���篁g⊆24 (0x18)鐚�荀� http://iserverd.khstu.ru/oscar/errorlist.html
+# NOTE ���醇������ AOL 茖頳�羆�篋�筝�腮� ICQ ������
+# XXX 茘�����緇��拷�� - acli 20100809
+msgid "Not while on AOL"
+msgstr "筝������� AOL"
+
 #  NOTE ������絖�筝峨�� Oscar (ICQ) ��茹i����④鐚�http://pidgin.im/pipermail/translators/2010-November/000554.html
 #  NOTE Oscar: ��絅遵��医��� Visible List ��
 #  NOTE Yahoo: �����冴���沿昆����鐚�絨�����絎���絅遵��援┗筝�膩�
@@ -8986,14 +9006,14 @@
 msgid "Select Server"
 msgstr "�御��篌堺����"
 
-msgid "QQ2005"
-msgstr "QQ2005"
+msgid "QQ2008"
+msgstr "QQ2008"
 
 msgid "QQ2007"
 msgstr "QQ2007"
 
-msgid "QQ2008"
-msgstr "QQ2008"
+msgid "QQ2005"
+msgstr "QQ2005"
 
 msgid "Connect by TCP"
 msgstr "篏睡�� TCP �g�"
@@ -9009,6 +9029,9 @@
 msgid "Show chat room when msg comes"
 msgstr "�九�域��紊��荐���������蕁�ず��紊��"
 
+msgid "Use default font"
+msgstr "篏睡����荐㊤���"
+
 # XXX 20080810 acli - 茘�����緇��拷�駕�����箙���
 msgid "Keep alive interval (seconds)"
 msgstr "罸��鎀�絨�腱����� Keep Alive"
@@ -12620,10 +12643,6 @@
 msgid "Fatal Error"
 msgstr "�顔�����荐���"
 
-# XXX ��⑮ - 20090226 acli
-msgid "bug master"
-msgstr "�ら��源膊�"
-
 # NOTE ������artist��鐚����ユ�弱�銀�����Artist��絖�筝駕�篆���荐㊧�pidgin��腓榊����graphic designer��鐚�腟�絨�筝���⑮������篋冴��
 msgid "artist"
 msgstr "綛渇�∵┃荐�"
@@ -12829,6 +12848,11 @@
 msgid "Maithili"
 msgstr "��������"
 
+#  NOTE 篁g⊆ mhr鐚�筝�腮����㊧�膤紫���掩�茯���鐚�膓㊤�榊�丞�茘���綛喝�育Μ��茯���
+#  XXX �鞘��井③綣���佂�h⑮��鐚����� http://zh.wikipedia.org/zh/薊���莚�
+msgid "Meadow Mari"
+msgstr "綛喝�育Μ����"
+
 #  NOTE��薤��狗���������腮��掩�茯���鐚�莊�絽�����薤��狗��筝��♂��篆�
 msgid "Macedonian"
 msgstr "薤��狗����"
@@ -16021,6 +16045,13 @@
 msgid "You do not have permission to uninstall this application."
 msgstr "�����罨���腱脂�ょ�綣��"
 
+#~ msgid "Automatically reject from users not in buddy list"
+#~ msgstr "�Û����腟���箴���ソ��羝���賢��篏睡����"
+
+# XXX ��⑮ - 20090226 acli
+#~ msgid "bug master"
+#~ msgstr "�ら��源膊�"
+
 #~ msgid "An error occurred on the in-band bytestream transfer\n"
 #~ msgstr "絽九�т���腟�羌��活叱��筝㊦�主�����\n"