# Handling of external icons and per node type enabling of link
# 
# To apply this patch:
# STEP 1: Chdir to the source directory.
# STEP 2: Run the 'applypatch' program with this patch file as input.
#
# If you do not have 'applypatch', it is part of the 'makepatch' package
# that you can fetch from the Comprehensive Perl Archive Network:
# http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz
# In the above URL, 'x' should be 2 or higher.
#
# To apply this patch without the use of 'applypatch':
# STEP 1: Chdir to the source directory.
# If you have a decent Bourne-type shell:
# STEP 2: Run the shell with this file as input.
# If you don't have such a shell, you may need to manually create/delete
# the files/directories as shown below.
# STEP 3: Run the 'patch' program with this file as input.
#
# These are the commands needed to create/delete files/directories:
#
mkdir 'css'
chmod 0755 'css'
rm -f 'addtoany.css'
touch 'css/addtoany.css'
chmod 0644 'css/addtoany.css'
#
# This command terminates the shell and need not be executed manually.
exit
#
#### End of Preamble ####

#### Patch data follows ####
diff -c 'addtoany/addtoany.module' 'addtoany.patched/addtoany.module'
Index: ./addtoany.module
Prereq:  1.8.2.3 
*** ./addtoany.module	Sat Apr 11 22:53:41 2009
--- ./addtoany.module	Wed May 13 17:11:22 2009
***************
*** 19,33 ****
   * Implementation of hook_link().
   */
  function addtoany_link($type, $node=NULL, $teaser = FALSE) {
    $links = array();
  
    if ($type === 'node' && user_access('view addtoany')) {
      if (($teaser && variable_get('addtoany_display_in_teasers', '0')) ||
!       (!$teaser && variable_get('addtoany_display_in_links', '0'))) {
        $links['addtoany'] = array(
!           'title' => _addtoany_create_button($node, $teaser),
!           'html' => TRUE,
!         );
      }
    }
  
--- 19,40 ----
   * Implementation of hook_link().
   */
  function addtoany_link($type, $node=NULL, $teaser = FALSE) {
+ 
+   // Checking if the node type is one where the addtoany link is enabled.
+   if (!array_search($node->type,
+                     variable_get('addtoany_enabled_node_types', array()))) {
+     return; // if not return
+   }
+ 
    $links = array();
  
    if ($type === 'node' && user_access('view addtoany')) {
      if (($teaser && variable_get('addtoany_display_in_teasers', '0')) ||
!         (!$teaser && variable_get('addtoany_display_in_links', '0'))) {
        $links['addtoany'] = array(
!         'title' => _addtoany_create_button($node, $teaser),
!         'html' => TRUE,
!       );
      }
    }
  
***************
*** 38,53 ****
   */
  function addtoany_menu($may_cache) {
    $items = array();
!   
!   if ($may_cache) {  
! 	  $items[] = array(
! 	  	'path'					=> 'admin/settings/addtoany',
! 	    'title'            		=> t('AddToAny'),
! 	    'description'      		=> t('Settings for your <a href="http://www.addtoany.com/" target="blank">AddToAny</a> Share/Save buttons.'),
! 	    'callback'    			=> 'drupal_get_form',
! 	    'callback arguments'   	=> array('addtoany_admin_settings'),
! 	    'access' 				=> user_access('administer addtoany'),
! 	  );
    }
  
    return $items;
--- 45,60 ----
   */
  function addtoany_menu($may_cache) {
    $items = array();
! 
!   if ($may_cache) {
!     $items[] = array(
!       'path' => 'admin/settings/addtoany',
!       'title' => t('AddToAny'),
!       'description' => t('Settings for your <a href="http://www.addtoany.com/" target="blank">AddToAny</a> Share/Save buttons.'),
!       'callback' => 'drupal_get_form',
!       'callback arguments' => array('addtoany_admin_settings'),
!       'access' => user_access('administer addtoany'),
!     );
    }
  
    return $items;
***************
*** 63,90 ****
    $form = array();
  
    global $base_path;
!   $button_img = '<img src="' . $base_path . drupal_get_path('module', 'addtoany') . '/images/%s" width="%d" height="%d" />';
!   
    $button_options = array(
!   	'share_16_16.png|16|16'		=> sprintf($button_img, 'share_16_16.png', 16, 16),
!   	'share_save_171_16.png|171|16' => sprintf($button_img, 'share_save_171_16.png', 171, 16),
!   	'share_save_256_24.png|256|24' => sprintf($button_img, 'share_save_256_24.png', 256, 24),
!   	'custom'				=> 'Custom button',
!   );
!   
!   $form['addtoany_general_settings'] = array(
!     '#type'  => 'fieldset',
!     '#title' => t('General'),
    );
!   $form['addtoany_general_settings']['addtoany_display_in_links'] = array(
!     '#type'          => 'checkbox',
!     '#title'         => t('Display on node pages'),
!     '#default_value' => variable_get('addtoany_display_in_links', '0'),
!     '#description'   => t('Display an addtoany button always on a node page\'s links section.'),
    );
!   $form['addtoany_general_settings']['addtoany_display_in_teasers'] = array(
      '#type'          => 'checkbox',
!     '#title'         => t('Display in node teasers'),
      '#default_value' => variable_get('addtoany_display_in_teasers', '0'),
      '#description'   => t('Display an addtoany button in the node teasers.'),
    );
--- 70,116 ----
    $form = array();
  
    global $base_path;
! 
!   // The default buttons images.
!   $default_button_images = addtoany_default_buttons();
! 
!   $addtoany_button_markup = 'Custom ';
! 
!   // The custom button.
!   if (variable_get('addtoany_image', 'share_save_171_16.png|171|16') == "custom" ) {
!     $addtoany_button_markup .= theme('image', variable_get('addtoany_custom_image', ''),
!                                      t('Custom Button Image'),t('Share Button'),
!                                      array('class' => 'addtoany-share-button-image'));
!   }
! 
    $button_options = array(
!     'share_16_16.png|16|16' => $default_button_images['16x16'],
!     'share_save_171_16.png|171|16' => $default_button_images['171x16'],
!     'share_save_256_24.png|256|24' => $default_button_images['256x24'],
!     'custom' => $addtoany_button_markup,
    );
! 
!   // Set the enctype property for the file type form element.
!   $form['#attributes']['enctype'] = 'multipart/form-data';
! 
!   $form['addtoany_link_settings'] = array(
!     '#type' => 'fieldset',
!     '#title' => t('Content types where link should be displayed'),
!     '#collapsible' => TRUE,
!     '#collapsed' => FALSE,
    );
! 
!   $form['addtoany_link_settings']['addtoany_enabled_node_types'] =  array(
!     '#type' => 'checkboxes',
!     '#title' => t('Enabled node types'),
!     '#options' => node_get_types('names'),
!     '#description' => t('In which content types should the link be enabled?'),
!     '#default_value' => variable_get('addtoany_enabled_node_types', array()),
!   );
! 
!   $form['addtoany_link_settings']['addtoany_display_in_teasers'] = array(
      '#type'          => 'checkbox',
!     '#title'         => t('Display link in node teasers'),
      '#default_value' => variable_get('addtoany_display_in_teasers', '0'),
      '#description'   => t('Display an addtoany button in the node teasers.'),
    );
***************
*** 95,125 ****
      '#collapsible'  => TRUE,
      '#collapsed'    => FALSE,
    );
    $form['addtoany_button_settings']['addtoany_image'] = array(
!     '#type' 		 => 'radios',
!     '#title' 		 => t('Button'),
      '#default_value' => variable_get('addtoany_image', 'share_save_171_16.png|171|16'),
!     '#options' 		 => $button_options,
    );
!   $form['addtoany_button_settings']['addtoany_custom_image'] = array(
!     '#type'          => 'textfield',
!     '#title'         => t('Custom button URL'),
!     '#default_value' => variable_get('addtoany_custom_image', ''),
!     '#description'   => t('URL to the button image of your choosing. Example: http://example.com/share.png'),
    );
!   $form['addtoany_button_settings']['addtoany_custom_image_attributes'] = array(
      '#type'          => 'textfield',
!     '#title'         => t('Button image HTML attributes'),
      '#default_value' => variable_get('addtoany_image_attributes', 'alt="Share/Save"'),
!     '#description'   => t('Extra HTML attributes for img tag. Example: alt=""'),
    );
!   
    $form['addtoany_additional_settings'] = array(
      '#type'         => 'fieldset',
      '#title'        => t('Additional options'),
      '#collapsible'  => TRUE,
      '#collapsed'    => TRUE,
    );
    $form['addtoany_additional_settings']['addtoany_additional_js'] = array(
      '#type'          => 'textarea',
      '#title'         => t('Additional script'),
--- 121,170 ----
      '#collapsible'  => TRUE,
      '#collapsed'    => FALSE,
    );
+ 
    $form['addtoany_button_settings']['addtoany_image'] = array(
!     '#type'              => 'radios',
!     '#title'             => t('Button'),
      '#default_value' => variable_get('addtoany_image', 'share_save_171_16.png|171|16'),
!     '#options'           => $button_options,
    );
! 
!   $form['addtoany_button_settings']['custom_button_upload_image'] = array(
!     '#type' => 'file',
!     '#title' => t('Upload button image'),
!     '#size' => 48,
!     '#description' => t('The image file to be used as the AddToAny button'),
    );
! 
!   $form['addtoany_button_settings']['addtoany_image_attributes'] = array(
      '#type'          => 'textfield',
!     '#title'         => t('Button additional HTML attributes'),
      '#default_value' => variable_get('addtoany_image_attributes', 'alt="Share/Save"'),
!     '#description'   => t('Extra HTML attributes for img tag. Example: class="addtoany-button"'),
!   );
! 
!   $form['addtoany_text_settings'] = array(
!     '#type' => 'fieldset',
!     '#title' => t('AddToAny share text settings'),
!     '#collapsible' => TRUE,
!     '#collapsed' => FALSE,
!     //    '#weight' => '<element weight>',
!   );
! 
!   $form['addtoany_text_settings']['addtoany_share_text'] = array(
!     '#type' => 'textfield',
!     '#title' => t('AddToAny text'),
!     '#description' => t('The text for the share link: placed next to the image'),
!     '#default_value' => variable_get('addtoany_share_text', t('Share this')),
    );
! 
    $form['addtoany_additional_settings'] = array(
      '#type'         => 'fieldset',
      '#title'        => t('Additional options'),
      '#collapsible'  => TRUE,
      '#collapsed'    => TRUE,
    );
+ 
    $form['addtoany_additional_settings']['addtoany_additional_js'] = array(
      '#type'          => 'textarea',
      '#title'         => t('Additional script'),
***************
*** 133,148 ****
      '#collapsible'  => TRUE,
      '#collapsed'    => TRUE,
    );
    $form['addtoany_widget_settings']['addtoany_dropdown_disabled'] = array(
      '#type'          => 'checkbox',
      '#title'         => t('Disable dropdown'),
      '#default_value' => variable_get('addtoany_dropdown_disabled', '0'),
      '#description'   => t('You can disable the drop-down for selecting where to share your link and use a pop-up window instead.'),
    );
!   
!   return system_settings_form($form);
  }
  
  /**
   * Implementation of hook_block().
   */
--- 178,289 ----
      '#collapsible'  => TRUE,
      '#collapsed'    => TRUE,
    );
+ 
    $form['addtoany_widget_settings']['addtoany_dropdown_disabled'] = array(
      '#type'          => 'checkbox',
      '#title'         => t('Disable dropdown'),
      '#default_value' => variable_get('addtoany_dropdown_disabled', '0'),
      '#description'   => t('You can disable the drop-down for selecting where to share your link and use a pop-up window instead.'),
    );
! 
!   $form['submit'] = array(
!     '#type' => 'submit',
!     '#value' => t('Update AddToAny settings')
!   );
! 
!   return $form;
  }
  
+ 
+ /**
+  * Validation function for the button image: file upload form element.
+  *
+  * @param $form_id
+  * @param $form_values
+  *
+  * @return
+  *   nothing
+  */
+ function addtoany_admin_settings_validate($form_id, $form_values) {
+ 
+   // Check the upload of the image button.
+   if (!variable_get('addtoany_custom_image', '')
+       &&
+       !file_check_upload('custom_button_upload_image')) {
+     form_set_error('custom_button_upload_image', t('Missing file for upload'));
+   }
+ 
+ 
+   // Check if any node type is enabled when requesting for the link to be
+   // enabled in node teasers.
+   if (!array_filter($form_values['addtoany_enabled_node_types'])
+       &&
+       $form_values['addtoany_display_in_teasers']) {
+     form_set_error('addtoany_enabled_node_types',
+                    t('At least one node type must be enabled'));
+   }
+ 
+ }  // addtoany_admin_settings_validate
+ 
+ 
+ 
+ /**
+  * Handles the subsmission of the admin settings form.
+  *
+  * @param $form
+  * @param $form_values
+  *
+  * @return type string
+  *   The path to which the browser should return after a sucessful form
+  *   submission.
+  */
+ function addtoany_admin_settings_submit($form_id, $form_values) {
+ 
+   // Filter the array for truthy values.
+   $types = array_filter($form_values['addtoany_enabled_node_types']);
+ 
+   // Setting the variables.
+   if (variable_get('addtoany_enabled_node_types', array()) != $types) {
+     variable_set('addtoany_enabled_node_types', $types);
+   }
+ 
+   variable_set('addtoany_display_in_teasers',
+                $form_values['addtoany_display_in_teasers']);
+ 
+   variable_set('addtoany_image', $form_values['addtoany_image']);
+ 
+   // If button image file is given use it as the button image.
+   $button_image_file = file_check_upload('custom_button_upload_image');
+ 
+   if ($button_image_file) {
+     $button_image_file = file_save_upload(
+       $button_image_file,
+       variable_get('file_directory_path', 'files'), TRUE);
+ 
+     $button_image_path = $button_image_file->filepath;
+     variable_set('addtoany_custom_image', $button_image_path);
+ 
+     // Checking if the uploaded file is an image.
+     if (!image_get_info($button_image_path)) {
+       form_set_error('custom_button_upload_image',
+                      t('Uploaded file is not an image'));
+     }
+   }
+ 
+   variable_set('addtoany_share_text', $form_values['addtoany_share_text']);
+ 
+   variable_set('addtoany_additional_js', $form_values['addtoany_additional_js']);
+ 
+   variable_set('addtoany_image_attributes',
+                $form_values['addtoany_image_attributes']);
+ 
+   variable_set('addtoany_dropdown_disabled',
+                $form_values['addtoany_dropdown_disabled']);
+ 
+   return 'admin/settings/addtoany';
+ } // addtoany_admin_settings_submit
+ 
+ 
  /**
   * Implementation of hook_block().
   */
***************
*** 165,245 ****
   *   String containing JavaScript code for the drop-down
   */
  function addtoany_footer($main = 0) {
! 	global $_addtoany_script;
! 	return $_addtoany_script;
  }
  
  /**
   * Internal function to generate code for AddToAny button and script
   *
   * @return
!  *   String containing html code for the button
   */
  function _addtoany_create_button($node=NULL, $teaser = FALSE) {
! 	global $_addtoany_counter, $base_path;
! 	
! 	$_addtoany_counter++;
! 	if ($_addtoany_counter == 1) {
! 		drupal_add_css((drupal_get_path('module', 'addtoany') .'/addtoany.css'));
! 	}
!   
! 	if($node) {
! 		$linkname = $node->title;
! 		$linkurl = url('node/'. $node->nid, NULL, NULL, TRUE);
! 	} else {
! 		$linkname = (drupal_get_title() ?
! 			  strip_tags(drupal_get_title()) . " - " . variable_get('site_name', 'Drupal') :
! 			  variable_get('site_name', 'Drupal'));
! 		$linkurl = url(ltrim(request_uri(), "/"), NULL, NULL, TRUE);
! 	}
!   
! 	// Drop-down disabled?
! 	if(variable_get('addtoany_dropdown_disabled', '0')) return;
! 
! 	global $_addtoany_script, $_addtoany_script_init;
! 	
! 	if ( ! $_addtoany_script_init)
! 		$_addtoany_script = '<script type="text/javascript">';
! 	else
! 		$_addtoany_script .= '<script type="text/javascript">';
! 		
! 	$_addtoany_script .= 'a2a_linkname="'. addslashes($linkname) .'";a2a_linkurl="'. $linkurl .'";';
! 	
! 	if ( ! $_addtoany_script_init) {
! 		$_addtoany_script .= variable_get('addtoany_additional_js', '');
! 		$_addtoany_script .= '</script><script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>';
! 	} else {
! 		$_addtoany_script .= 'a2a_init("page");</script>';
! 	}
! 	
! 	$_addtoany_script_init = TRUE;
  
    $disable_dropdown = variable_get('addtoany_dropdown_disabled', '0');
!   
    $button_setting = variable_get('addtoany_image', 'share_save_171_16.png|171|16');
!   
    if ($button_setting == "custom") {
!   	$button_image 		= variable_get('addtoany_custom_image', '');
!   	$button_width    	= '';
! 	$button_height		= ''; 
!   } else {
! 	  $button 			= explode('|', $button_setting);
! 	  $button_filename 	= $button[0];
! 	  $button_width    	= ' width="' . $button[1] . '"';
! 	  $button_height	= ' height="' . $button[2] . '"';
! 	  $button_image 	= $base_path . drupal_get_path('module', 'addtoany') . '/images/' . $button_filename;
!   }
!      
!   return ( sprintf('
!       <a%s href="http://www.addtoany.com/share_save?linkurl=%s&amp;linkname=%s"><img src="%s"%s%s %s/></a>
!       ',
! 	  $disable_dropdown ? '' : ' class="a2a_dd"',
! 	  rawurlencode($linkurl),
!       rawurlencode($linkname),
!       $button_image,
!       $button_width,
!       $button_height,
!       variable_get('addtoany_image_attributes', 'alt="Share/Save"')
!   ));
  
  }
--- 306,435 ----
   *   String containing JavaScript code for the drop-down
   */
  function addtoany_footer($main = 0) {
!   global $_addtoany_script;
!   return $_addtoany_script;
  }
  
  /**
+  * TODO: Explore the possibility of using $.getScript or drupal_add_js to load
+  * the script.
+  *
+  */
+ 
+ /**
   * Internal function to generate code for AddToAny button and script
   *
   * @return
!  *   String containing HTML code for the button.
   */
  function _addtoany_create_button($node=NULL, $teaser = FALSE) {
!   global$base_path;
! 
! 
! 
!   $module_path = drupal_get_path('module', 'addtoany');
! 
!   // Adding the CSS file.
!   drupal_add_css($module_path .'/css/addtoany.css');
! 
! 
!   if($node) {
!     $linkname = $node->title;
!     $linkurl = url('node/'. $node->nid, NULL, NULL, TRUE);
!   } else {
!     $linkname = (drupal_get_title() ?
!                  strip_tags(drupal_get_title()) . " - " . variable_get('site_name', 'Drupal') :
!                  variable_get('site_name', 'Drupal'));
!     $linkurl = url(ltrim(request_uri(), "/"), NULL, NULL, TRUE);
!   }
! 
!   // Drop-down disabled?
!   if(variable_get('addtoany_dropdown_disabled', '0')) return;
! 
!   global $_addtoany_script, $_addtoany_script_init;
! 
!   if ( ! $_addtoany_script_init)
!     $_addtoany_script = '<script type="text/javascript">';
!   else
!     $_addtoany_script .= '<script type="text/javascript">';
! 
!   $_addtoany_script .= 'a2a_linkname="'. addslashes($linkname) .'";a2a_linkurl="'. $linkurl .'";';
! 
!   if ( ! $_addtoany_script_init) {
!     $_addtoany_script .= variable_get('addtoany_additional_js', '');
!     $_addtoany_script .= '</script><script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>';
!   } else {
!     $_addtoany_script .= 'a2a_init("page");</script>';
!   }
! 
!   $_addtoany_script_init = TRUE;
  
    $disable_dropdown = variable_get('addtoany_dropdown_disabled', '0');
! 
    $button_setting = variable_get('addtoany_image', 'share_save_171_16.png|171|16');
! 
    if ($button_setting == "custom") {
!     $button_image = variable_get('addtoany_custom_image', '');
!     // Get image dimensions with get_image_info.
!     $image_info = image_get_info($button_image);
!     $button_width =  ' width ="'. $image_info['width'] .'"';
!     $button_height = ' height="'. $image_info['height'] .'"';
!   }
!   else
!     {
!       $button                   = explode('|', $button_setting);
!       $button_filename  = $button[0];
!       $button_width     = ' width="' . $button[1] .'"';
!       $button_height    = ' height="'. $button[2] .'"';
!       $button_image     = $base_path . drupal_get_path('module', 'addtoany') . '/images/' . $button_filename;
!       if (!variable_get('addtoany_default_button_image','')) {
!         variable_set('addtoany_default_button_image', $button_image);
!       }
!     }
  
+   return (sprintf('
+       <span class="addtoany"><a%s href="http://www.addtoany.com/share_save?linkurl=%s&amp;linkname=%s"><img src="%s"%s%s %s/><span class="addtoany-share-text">%s</span></a></span>',
+                   $disable_dropdown ? '' : ' class="a2a_dd"',
+                   rawurlencode($linkurl),
+                   rawurlencode($linkname),
+                   $button_setting == "custom"
+                   ?
+                   file_create_url($button_image) : $button_image,
+                   $button_width,
+                   $button_height,
+                   variable_get('addtoany_image_attributes', 'alt="Share/Save"'),
+                   variable_get('addtoany_share_text', t('Share this'))
+           ));
  }
+ 
+ /**
+  * Builds and returns the array of default AddToAny buttons.
+  *
+  *
+  * @return
+  *   The array with the default AddToAny buttons.
+  */
+ function addtoany_default_buttons() {
+ 
+   $module_path = drupal_get_path('module', 'addtoany');
+ 
+   // The default buttons.
+   return array('16x16' => theme('image',
+                                 $module_path .'/images/share_16_16.png',
+                                 t('Share this'),
+                                 t('Share Button'),
+                                 array('class' => 'addtoany-share-button-image')),
+ 
+                '171x16' => theme('image',
+                                  $module_path .'/images/share_save_171_16.png',
+                                  t('Share this'),
+                                  t('Share Button'),
+                                  array('class' => 'addtoany-share-button-image')),
+ 
+                '256x24' => theme('image',
+                                  $module_path .'/images/share_save_256_24.png',
+                                  t('Share this'),
+                                  t('Share Button'),
+                                  array('class' => 'addtoany-share-button-image')),
+   );
+ }  //addtoany_default_buttons
diff -c /dev/null 'addtoany.patched/css/addtoany.css'
Index: ./css/addtoany.css
*** ./css/addtoany.css	Thu Jan  1 01:00:00 1970
--- ./css/addtoany.css	Sat Apr 25 03:36:14 2009
***************
*** 0 ****
--- 1,25 ----
+ /* This file contains the CSS for the addtoany widget and buttons. */
+ .addtoany {
+   display:inline;
+ }
+ 
+ 
+ .addtoany img {
+   vertical-align: bottom;
+   margin-bottom: 2px;
+ }
+ 
+ .addtoany a {
+   text-decoration: none;
+   outline: none;
+ 
+ }
+ 
+ .a2a_menu tbody {
+   border:0 !important;
+ }
+ 
+ img.addtoany-button {
+   vertical-align: middle;
+ }
+ 
#### End of Patch data ####

#### ApplyPatch data follows ####
# Data version        : 1.0
# Date generated      : Wed May 13 17:22:38 2009
# Generated by        : makepatch 2.03
# Recurse directories : Yes
# Excluded files      : (\A|/).*\~\Z
#                       (\A|/).*\.a\Z
#                       (\A|/).*\.bak\Z
#                       (\A|/).*\.BAK\Z
#                       (\A|/).*\.elc\Z
#                       (\A|/).*\.exe\Z
#                       (\A|/).*\.gz\Z
#                       (\A|/).*\.ln\Z
#                       (\A|/).*\.o\Z
#                       (\A|/).*\.obj\Z
#                       (\A|/).*\.olb\Z
#                       (\A|/).*\.old\Z
#                       (\A|/).*\.orig\Z
#                       (\A|/).*\.rej\Z
#                       (\A|/).*\.so\Z
#                       (\A|/).*\.Z\Z
#                       (\A|/)\.del\-.*\Z
#                       (\A|/)\.make\.state\Z
#                       (\A|/)\.nse_depinfo\Z
#                       (\A|/)core\Z
#                       (\A|/)tags\Z
#                       (\A|/)TAGS\Z
# r 'addtoany.css' 136 0
# p 'addtoany.module' 8237 1242231082 0100644
# c 'css/addtoany.css' 0 1240626974 0100644
# C 'css' 0 1240887483 040755
#### End of ApplyPatch data ####

#### End of Patch kit [created: Wed May 13 17:22:38 2009] ####
#### Patch checksum: 656 23040 24380 ####
#### Checksum: 689 24186 56067 ####
