From 22b329c4b200f9db93726c1c8ee37cc70db3ad2b Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Tue, 5 Jan 2016 01:58:16 +0100
Subject: [PATCH] V1.2.1: Implement automatic upgrades for the advanced (paid)
 plugin

---
 Makefile                                      |    4 +-
 assets/css/opentools-updatecheck.css          |   25 +
 assets/js/opentools-updatecheck.js            |   63 +
 opentools-update-checker.php                  |  232 +++
 ordernumbers_woocommerce.php                  |   78 +
 plugin-update-checker/README.md               |   97 ++
 plugin-update-checker/composer.json           |   19 +
 plugin-update-checker/css/puc-debug-bar.css   |   62 +
 plugin-update-checker/debug-bar-panel.php     |  135 ++
 plugin-update-checker/debug-bar-plugin.php    |  102 ++
 plugin-update-checker/github-checker.php      |  449 +++++
 plugin-update-checker/js/debug-bar.js         |   52 +
 plugin-update-checker/license.txt             |    7 +
 .../plugin-update-checker.php                 | 1215 +++++++++++++
 plugin-update-checker/vendor/Parsedown.php    | 1535 +++++++++++++++++
 .../vendor/readme-parser.php                  |  331 ++++
 ...ocommerce-ordernumbers-advanced_v1.2.1.zip |  Bin 0 -> 105970 bytes
 woocommerce-advanced-ordernumbers.php         |   17 +
 18 files changed, 4421 insertions(+), 2 deletions(-)
 create mode 100644 assets/css/opentools-updatecheck.css
 create mode 100644 assets/js/opentools-updatecheck.js
 create mode 100644 opentools-update-checker.php
 create mode 100644 plugin-update-checker/README.md
 create mode 100644 plugin-update-checker/composer.json
 create mode 100644 plugin-update-checker/css/puc-debug-bar.css
 create mode 100644 plugin-update-checker/debug-bar-panel.php
 create mode 100644 plugin-update-checker/debug-bar-plugin.php
 create mode 100644 plugin-update-checker/github-checker.php
 create mode 100644 plugin-update-checker/js/debug-bar.js
 create mode 100644 plugin-update-checker/license.txt
 create mode 100644 plugin-update-checker/plugin-update-checker.php
 create mode 100644 plugin-update-checker/vendor/Parsedown.php
 create mode 100644 plugin-update-checker/vendor/readme-parser.php
 create mode 100644 releases/opentools-woocommerce-ordernumbers-advanced_v1.2.1.zip

diff --git a/Makefile b/Makefile
index fb7301a..4031095 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 BASE=ordernumbers
 PLATTFORM=woocommerce
 VENDOR=opentools
-VERSION=1.2
+VERSION=1.2.1
 DIR = $(shell pwd)
 SVNDIR=wordpress-plugin-svn
 
@@ -11,7 +11,7 @@ ADVBUILDDIR=$(PLATTFORM)-advanced-$(BASE)
 
 PLUGINFILES=library assets ordernumber_helper_woocommerce.php ordernumbers_woocommerce_basic.php readme.txt LICENSE.txt
 BASICPLUGINFILES=woocommerce-basic-ordernumbers.php
-ADVPLUGINFILES=woocommerce-advanced-ordernumbers.php ordernumbers_woocommerce.php
+ADVPLUGINFILES=woocommerce-advanced-ordernumbers.php ordernumbers_woocommerce.php opentools-update-checker.php plugin-update-checker/
 
 TRANSLATIONS=
 
diff --git a/assets/css/opentools-updatecheck.css b/assets/css/opentools-updatecheck.css
new file mode 100644
index 0000000..fba758b
--- /dev/null
+++ b/assets/css/opentools-updatecheck.css
@@ -0,0 +1,25 @@
+
+tr.otup_update_credentials .update-credentials {
+/*     font-size: 13px; */
+/*     font-weight: 400; */
+    margin: 0 10px 8px 31px;
+    padding: 6px 12px 8px 40px;
+    background-color: #f7f7f7;
+    background-color: rgba(0,0,0,.03);
+}
+
+.widefat tr.otup_update_credentials th input, .widefat tr.otup_update_credentials thead td input {
+    /* margin: 0 0 0 8px; */
+    padding: inherit;
+    vertical-align: inherit;
+}
+
+tr.otup_update_credentials div.message-fail {
+	background-color: #FFBFBF;
+	padding: 3px;
+}
+
+tr.otup_update_credentials div.message-success {
+	background-color: #BFFFBF;
+	padding: 3px;
+}
diff --git a/assets/js/opentools-updatecheck.js b/assets/js/opentools-updatecheck.js
new file mode 100644
index 0000000..865e437
--- /dev/null
+++ b/assets/js/opentools-updatecheck.js
@@ -0,0 +1,63 @@
+/**
+ * Ordernumber Admin JS
+ */
+var showUpdateCredentialsRow = function (btn, slug, nonce) {
+	var ajaxargs = {
+		type: "POST",
+		url: ajax_updatecheck.ajax_url,
+		data: { 
+			action: 'getUpdateCredentialsRow',
+			slug: slug,
+			_ajax_nonce: nonce
+		},
+		success: function ( json ) {
+			jQuery(btn).closest('tr').after(json['row']);
+		},
+		error: function() {  },
+		complete: function() {  },
+	};
+	jQuery.ajax(ajaxargs);
+	return false;
+};
+
+var submitUpdateCredentials = function(btn) {
+	var tr = jQuery(btn).closest('tr');
+	var slug = jQuery(tr).data("slug");
+	var nonce = jQuery(tr).data("nonce");
+	var order_number = jQuery(tr).find("input[name='otup_update_credentials["+slug+"][order_number]']").val();
+	var order_pass = jQuery(tr).find("input[name='otup_update_credentials["+slug+"][order_pass]']").val();
+	
+	var ajaxargs = {
+		type: "POST",
+		url: ajax_updatecheck.ajax_url,
+		data: { 
+			action: 'submitUpdateCredentials',
+			slug: slug,
+			_ajax_nonce: nonce,
+			order_number: order_number,
+			order_pass: order_pass
+		},
+		success: function ( json ) {
+			if (json['success']) {
+				jQuery(tr).find('div.update-credentials-message').html(json['message']);
+				jQuery(tr).find('div.update-credentials').removeClass('message-fail').addClass('message-success')
+				jQuery(tr).find('div.update-credentials-form').fadeOut( 500, function() { jQuery(this).remove(); });
+				jQuery(tr).delay(5000).fadeOut(1000, function() { jQuery(this).remove(); });
+			} else {
+				jQuery(tr).find('div.update-credentials-message').html(json['message']);
+				jQuery(tr).find('div.update-credentials').addClass('message-fail').removeClass('message-success');
+			}
+		},
+		error: function() { 
+			jQuery(tr).find('div.update-credentials-message').html("Unable to validate the update credentials. Please make sure the server is available.");
+			jQuery(tr).find('div.update-credentials').addClass('message-fail').removeClass('message-success');
+		},
+		complete: function() {  },
+	};
+	jQuery.ajax(ajaxargs);
+	return false;
+}
+
+jQuery( function ( $ ) {
+	$('input.otup_update_credentials_submit').click(submitUpdateCredentials);
+});
diff --git a/opentools-update-checker.php b/opentools-update-checker.php
new file mode 100644
index 0000000..00952e0
--- /dev/null
+++ b/opentools-update-checker.php
@@ -0,0 +1,232 @@
+<?php
+
+
+// *****************************************************************
+// * PLUGIN UPDATES (using plugin-update-checker and a self-written update server script
+// * http://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/
+// *****************************************************************
+
+if (!class_exists('OpenToolsPluginUpdateChecker')):
+
+require 'plugin-update-checker/plugin-update-checker.php';
+
+class OpenToolsPluginUpdateChecker extends PluginUpdateChecker_2_1 {
+	public function __construct($metadataUrl, $pluginFile, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '')
+	{
+		parent::__construct($metadataUrl, $pluginFile, $slug, $checkPeriod, $optionName, $muPluginFile);
+		$this->installOTHooks();
+	}
+	
+	protected function installOTHooks() 
+	{
+		// Append the update credentials to the update server link
+		$this->addQueryArgFilter(array($this, 'appendQueryArgsCredentials'));
+		
+		add_action('admin_print_scripts-plugins.php', array($this, 'addCredentialCheckScripts'));
+		add_action('admin_print_styles-plugins.php',  array($this, 'addCredentialCheckStyles'));
+
+
+		add_filter('plugin_row_meta', array($this, 'displayUpdateCredentialsLink'), 10, 2);
+
+		add_action( 'wp_ajax_getUpdateCredentialsRow',		array( &$this, 'getUpdateCredentialsRow') );
+		add_action( 'wp_ajax_submitUpdateCredentials',		array( &$this, 'submitUpdateCredentials') );
+		
+		
+// 		add_action('after_plugin_row_'.$this->pluginFile, array($this, 'displayUpdateCredentialsRow'), 10, 2);
+// 		add_action('admin_init', array($this, 'checkSubmittedUpdateCredentials'));
+// 		add_action('all_admin_notices', array($this, 'displayCredentialsCheckResult'));
+	}
+
+	protected function getCredentials($slug) 
+	{
+		$credentials = array('validated' => FALSE);
+		$credentials['order_number'] = get_option('otup_credentials_order_number_'.$slug);
+		$credentials['order_pass']   = get_option('otup_credentials_order_pass_'.$slug);
+		$credentials['validated']    = get_option('otup_credentials_validated_'.$slug);
+		return $credentials;
+	}
+	
+	protected function setCredentials($slug, $order_number, $order_pass, $validated = false) 
+	{
+		update_option('otup_credentials_order_number_'.$slug, $order_number,false);
+		update_option('otup_credentials_order_pass_'.$slug,   $order_pass,  false);
+		update_option('otup_credentials_validated_'.$slug,    $validated,   false);
+	}
+
+
+	public function addCredentialCheckScripts() {
+		wp_register_script( 'opentools-updatecheck', plugins_url('assets/js/opentools-updatecheck.js', __FILE__), array('jquery'));
+		wp_enqueue_script( 'opentools-updatecheck');
+		
+		// Handle the translations:
+		// Check for MS dashboard
+		if( is_network_admin() )
+			$url = network_admin_url( 'admin-ajax.php' );
+		else
+			$url = admin_url( 'admin-ajax.php' );
+		$localizations = array( 'ajax_url' => $url );
+
+		// in JavaScript, object properties are accessed as ajax_object.ajax_url, ajax_object.we_value
+		wp_localize_script( 'opentools-updatecheck', 'ajax_updatecheck', $localizations );
+	}
+	
+	public function addCredentialCheckStyles() {
+		wp_register_style( 'opentools-updatecheck', plugins_url('assets/css/opentools-updatecheck.css', __FILE__));
+		wp_enqueue_style( 'opentools-updatecheck');
+	}
+	
+	/** Append the ordernumber and order password to the update server URL 
+	 */
+	public function appendQueryArgsCredentials($queryArgs) {
+		$credentials = $this->getCredentials($this->slug);
+		if (isset($credentials['order_number'])) {
+			$queryArgs['order_number'] = $credentials['order_number'];
+		}
+		if (isset($credentials['order_pass'])) {
+			$queryArgs['order_pass'] = $credentials['order_pass'];
+		}
+		return $queryArgs;
+	}
+
+	/**
+	 * Add a "Update Credentials" link to the plugin row in the "Plugins" page. By default,
+	 * the new link will appear after the "Visit plugin site" link. 
+	 *
+	 * You can change the link text by using the "otup_enter_update_credentials-$slug" filter.
+	 * Returning an empty string from the filter will disable the link.
+	 *
+	 * @param array $pluginMeta Array of meta links.
+	 * @param string $pluginFile
+	 * @return array
+	 */
+	public function displayUpdateCredentialsLink($pluginMeta, $pluginFile) {
+		$isRelevant = ($pluginFile == $this->pluginFile)
+		              || (!empty($this->muPluginFile) && $pluginFile == $this->muPluginFile);
+
+		if ( $isRelevant && current_user_can('update_plugins') ) {
+			$linkText = apply_filters('otup_enter_update_credentials-' . $this->slug, __('Update Credentials', 'oton-updates'));
+			if ( !empty($linkText) ) {
+				$pluginMeta[] = sprintf('<a href="#" onClick=\'return showUpdateCredentialsRow(this, "%s", "%s");\' >%s</a>', esc_attr($this->slug), esc_attr(wp_create_nonce( 'otup_enter_update_credentials' )), $linkText);
+			}
+		}
+		return $pluginMeta;
+	}
+	
+	
+	/**
+	* If the user has clicked on the "Update Credentials" link, display the input boxes after the plugin row.
+	*
+	* @param string $file
+	* @param array  $plugin_data
+	* @return false|void
+	*/
+	public function getUpdateCredentialsRow() {
+		$json = array('row' => '', 'message'=>'Unsuccessful');
+		
+		$showCredentials = isset($_REQUEST['slug'])
+			&& $_REQUEST['slug'] == $this->slug
+			&& current_user_can('update_plugins')
+			&& check_ajax_referer('otup_enter_update_credentials');
+			
+		if ( $showCredentials && (is_network_admin() || !is_multisite() )) {
+			$slug = $this->slug;
+			if ( is_network_admin() ) {
+				$active_class = is_plugin_active_for_network( $this->pluginFile ) ? 'active': '';
+			} else {
+				$active_class = is_plugin_active( $this->pluginFile ) ? 'active' : '';
+			}
+			
+			$current_credentials = $this->getCredentials($slug);
+			
+			// TODO: Remove the arrows icon from the field:
+			$tr = '<tr class="' . $active_class . ' otup_update_credentials" id="' . esc_attr( $slug . '-credentials' ) . '" data-slug="' . esc_attr( $slug ) . '" data-nonce="' . esc_attr( wp_create_nonce( 'otup_enter_update_credentials_'.$slug ) ) . '">';
+			$tr .= '<th colspan="3" class="check-column colspanchange">';
+			$tr .= '<div class="update-credentials">';
+			$tr .= '<div class="update-credentials-message">';
+			$tr .= '</div>';
+			$tr .= '<div class="update-credentials-form">';
+			
+			$tr .= __('Order Number:')   . " <input type=\"text\" name=\"otup_update_credentials[$slug][order_number]\" value=\"" . esc_attr($current_credentials['order_number']) . "\">&nbsp;&nbsp;&nbsp;&nbsp;";
+			$tr .= __('Order Password:') . " <input type=\"text\" name=\"otup_update_credentials[$slug][order_pass]\"   value=\"" . esc_attr($current_credentials['order_pass']) .   "\">&nbsp;&nbsp;&nbsp;&nbsp;";
+			$tr .= '<input type="submit" class="button otup_update_credentials_submit" onclick="return submitUpdateCredentials(this);" >';
+
+			$tr .= '</div>';
+			$tr .= '</div></th></tr>';
+			$json['row'] = $tr;
+			$json['message'] = '';
+		} else {
+			$json['message'] = __("No permissions to modify update credentials", "opentools-updatecheck");
+		}
+		wp_send_json($json);
+	}
+
+
+	/**
+	 * Check the submitted update credentials for correctness and save them
+	 *
+	 * @return void
+	 */
+	public function submitUpdateCredentials() {
+		$json = array('message' => '', 'success' => FALSE);
+		$slug = isset($_REQUEST['slug'])?($_REQUEST['slug']):"INVALIDSLUG";
+		
+		$submitCredentials = $slug == $this->slug
+			&& current_user_can('update_plugins')
+			&& check_ajax_referer('otup_enter_update_credentials_'.$slug);
+			
+
+		if ( $submitCredentials ) {
+			$ordernumber = $_REQUEST['order_number'];
+			$orderpass= $_REQUEST['order_pass'];
+			
+			$message = "";
+			$validated = $this->checkUpdateCredentials($ordernumber, $orderpass, $message);
+			$this->setCredentials($this->slug, $ordernumber, $orderpass, $validated);
+			
+			$json['success'] = $validated;
+			
+			if ($validated) {
+				if ( is_network_admin() ) {
+					$active_class = is_plugin_active_for_network( $this->pluginFile ) ? 'active': '';
+				} else {
+					$active_class = is_plugin_active( $this->pluginFile ) ? 'active' : '';
+				}
+
+				$json['message'] .= __("Update credentials successfully validated and saved. Automatic updates will be provided.", "opentools-updatecheck");
+			} else {
+				$json['message'] = $message;
+			}
+		} else {
+			$json['message'] = __("No permissions to modify update credentials", "opentools-updatecheck");
+		}
+		wp_send_json($json);
+	}
+
+	public function checkUpdateCredentials($ordernumber, $orderpass, &$message)
+	{
+		$this->setCredentials($this->slug, $ordernumber, $orderpass);
+		$success = FALSE;
+		$updateinfo = $this->requestInfo(array());
+		if ($updateinfo && isset($updateinfo->download_url)) {
+			$downloadurl = $updateinfo->download_url;
+			$downloadurl .= (parse_url($downloadurl, PHP_URL_QUERY) ? '&' : '?') . 'check_access=1';
+		
+			$headers = get_headers($downloadurl);
+			list($version, $status_code, $msg) = explode(' ',$headers[0], 3);
+		
+			// Check the HTTP Status code
+			$message = $msg;
+			$success = ($status_code==200);
+		} else {
+			$message = __('Unable to access plugin download URL. Please check your credentials.');
+		}
+		return $success;
+	}
+
+};
+
+endif;
+
+
+
+// *****************************************************************
diff --git a/ordernumbers_woocommerce.php b/ordernumbers_woocommerce.php
index 86c1ff2..fc6ef98 100644
--- a/ordernumbers_woocommerce.php
+++ b/ordernumbers_woocommerce.php
@@ -268,6 +268,84 @@ class OpenToolsOrdernumbers extends OpenToolsOrdernumbersBasic {
 		$reps = apply_filters( 'opentools_ordernumber_replacements', $reps, $details, $nrtype);
 	}
 
+
+	/** ************************************************************
+	 *  Support for automatic extension updates
+	 ** ************************************************************/
+	public function update_access_check() {
+		$ordernumber = $_POST['order_number'];
+		$orderpass = $_POST['order_pass'];
+		
+		$json = $this->helper->ajax_counter_delete($_POST['nrtype'], $_POST['counter']);
+		wp_send_json($json);
+	}
+    public function checkUpdateAccess($order_number, $order_pass, $json = array()) {
+		// First, extract the update server URL from the manifest, then load 
+		// the update XML from the update server, extract the download URL, 
+		// append the order number and password and check whether access is 
+		// possible.
+		$json['success'] = FALSE;
+		if (isset($this->_xmlFile)) {
+			$xmlfile = $this->_xmlFile;
+		} else {
+			// VM 2 does not set the _xmlFile property, so construct it manually
+			$xmlfile = JPATH_SITE . '/plugins/' . $this->_type . '/' . $this->_name . '/' . $this->_name . '.xml';
+		}
+		$xml = simplexml_load_file($xmlfile);
+		if (!$xml || !isset($xml->updateservers)) {
+			JFactory::getApplication()->enqueueMessage(JText::sprintf('OPENTOOLS_XMLMANIFEST_ERROR', $this->_xmlFile), 'error');
+			return $json;
+		}
+		$updateservers = $xml->updateservers;
+		foreach ($updateservers->children() as $server) {
+			if ($server->getName()!='server') {
+				JFactory::getApplication()->enqueueMessage(JText::sprintf('OPENTOOLS_XMLMANIFEST_ERROR', $this->_xmlFile), 'error');
+				continue;
+			}
+			$updateurl = html_entity_decode((string)$server);
+			$updatescript = simplexml_load_file($updateurl);
+			if (!$updatescript) {
+				JFactory::getApplication()->enqueueMessage(JText::sprintf('OPENTOOLS_UPDATESCRIPT_ERROR', $updateurl), 'error');
+				continue;
+			}
+			$urls = $updatescript->xpath('/updates/update/downloads/downloadurl');
+			while (list( , $node) = each($urls)) {
+				$downloadurl = (string)($node);
+				if ($order_number) {
+					$downloadurl .= (parse_url($downloadurl, PHP_URL_QUERY) ? '&' : '?') . 'order_number=' . urlencode($order_number);
+				}
+				if ($order_pass) {
+					$downloadurl .= (parse_url($downloadurl, PHP_URL_QUERY) ? '&' : '?') . 'order_pass=' . urlencode($order_pass);
+				}
+				$downloadurl .= (parse_url($downloadurl, PHP_URL_QUERY) ? '&' : '?') . 'check_access=1';
+
+				$headers = get_headers($downloadurl);
+				list($version, $status_code, $msg) = explode(' ',$headers[0], 3);
+				
+				// Check the HTTP Status code
+				switch($status_code) {
+					case 200:
+						$json['success'] = TRUE;
+						JFactory::getApplication()->enqueueMessage($msg, 'message');
+						$this->setupUpdateCredentials($order_number, $order_pass);
+						break;
+					default:
+						JFactory::getApplication()->enqueueMessage($msg, 'error');
+						// Clear the credentials...
+						$this->setupUpdateCredentials("", "");
+						break;
+				}
+				$this->setAndSaveParams(array(
+					'update_credentials_checked'=>$json['success'],
+					'order_number' => $order_number,
+					'order_pass' => $order_pass,
+				));
+			}
+		}
+		return $json;
+    }
+
+	
 	/** ************************************************************
 	 *  Support for WPO WooCommerce PDF Invoices and Packaging Slips
 	 ** ************************************************************
diff --git a/plugin-update-checker/README.md b/plugin-update-checker/README.md
new file mode 100644
index 0000000..9d08d38
--- /dev/null
+++ b/plugin-update-checker/README.md
@@ -0,0 +1,97 @@
+Plugin Update Checker
+=====================
+
+This is a custom update checker library for WordPress plugins. It lets you add automatic update notifications and one-click upgrades to your commercial and private plugins. All you need to do is put your plugin details in a JSON file, place the file on your server, and pass the URL to the library. The library periodically checks the URL to see if there's a new version available and displays an update notification to the user if necessary.
+
+From the users' perspective, it works just like with plugins hosted on WordPress.org. The update checker uses the default plugin upgrade UI that will already be familiar to most WordPress users.
+
+[See this blog post](http://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/) for  more information and usage instructions.
+
+Getting Started
+---------------
+
+### Self-hosted Plugins
+
+1. Make a JSON file that describes your plugin. Here's a minimal example:
+
+	```json
+    {
+    	"name" : "My Cool Plugin",
+    	"version" : "2.0",
+    	"author" : "John Smith",
+    	"download_url" : "http://example.com/plugins/my-cool-plugin.zip",
+    	"sections" : {
+    		"description" : "Plugin description here. You can use HTML."
+    	}
+    }
+	```
+	See [this table](https://spreadsheets.google.com/pub?key=0AqP80E74YcUWdEdETXZLcXhjd2w0cHMwX2U1eDlWTHc&authkey=CK7h9toK&hl=en&single=true&gid=0&output=html) for a full list of supported fields.
+2. Upload this file to a publicly accessible location.
+3. Download [the update checker](https://github.com/YahnisElsts/plugin-update-checker/releases/latest), unzip the archive and copy the `plugin-update-checker` directory to your plugin.
+4. Add the following code to the main plugin file:
+
+	```php
+	require 'plugin-update-checker/plugin-update-checker.php';
+	$myUpdateChecker = PucFactory::buildUpdateChecker(
+		'http://example.com/path/to/metadata.json',
+		__FILE__
+	);
+	```
+
+#### Notes
+- You could use [wp-update-server](https://github.com/YahnisElsts/wp-update-server) to automatically generate JSON metadata from ZIP packages.
+- The second argument passed to `buildUpdateChecker` should be the full path to the main plugin file.
+- There are more options available - see the [blog](http://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/) for details.
+
+### Plugins Hosted on GitHub
+
+*(GitHub support is experimental.)*
+
+1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest), unzip it and copy the `plugin-update-checker` directory to your plugin.
+2. Add the following code to the main file of your plugin:
+
+	```php
+	require 'plugin-update-checker/plugin-update-checker.php';
+	$className = PucFactory::getLatestClassVersion('PucGitHubChecker');
+	$myUpdateChecker = new $className(
+		'https://github.com/user-name/plugin-repo-name/',
+		__FILE__,
+		'master'
+	);
+	```
+	The third argument specifies the branch to use for updating your plugin. The default is `master`. If the branch name is omitted or set to `master`, the update checker will use the latest release or tag (if available). Otherwise it will use the specified branch.
+3. Optional: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/about/readme.txt). The contents of this file will be shown when the user clicks the "View version 1.2.3 details" link.
+
+#### Notes
+
+If your GitHub repository requires an access token, you can specify it like this:
+```php
+$myUpdateChecker->setAccessToken('your-token-here');
+```
+
+The GitHub version of the library will pull update details from the following parts of a release/tag/branch:
+
+- Changelog
+	- The "Changelog" section of `readme.txt`.
+	- One of the following files:
+		CHANGES.md, CHANGELOG.md, changes.md, changelog.md
+	- Release notes.
+- Version number
+	- The "Version" plugin header.
+	- The latest release or tag name.
+- Required and tested WordPress versions
+	- The "Requires at least" and "Tested up to" fields in `readme.txt`.
+	- The following plugin headers:
+		`Required WP`, `Tested WP`, `Requires at least`, `Tested up to`
+- "Last updated" timestamp
+	- The creation timestamp of the latest release.
+	- The latest commit of the selected tag or branch that changed the main plugin file.
+- Number of downloads
+	- The `download_count` statistic of the latest release.
+	- If you're not using GitHub releases, there will be no download stats.
+- Other plugin details - author, homepage URL, description
+	- The "Description" section of `readme.txt`.
+	- Remote plugin headers (i.e. the latest version on GitHub).
+	- Local plugin headers (i.e. the currently installed version).
+- Ratings, banners, screenshots
+	- Not supported.
diff --git a/plugin-update-checker/composer.json b/plugin-update-checker/composer.json
new file mode 100644
index 0000000..8d1d4d3
--- /dev/null
+++ b/plugin-update-checker/composer.json
@@ -0,0 +1,19 @@
+{
+	"name": "yahnis-elsts/plugin-update-checker",
+	"type": "library",
+	"description": "A custom update checker for WordPress plugins. Useful if you can't host your plugin in the official WP plugin repository but still want it to support automatic plugin updates.",
+	"keywords": ["wordpress", "plugin updates", "automatic updates"],
+	"homepage": "https://github.com/YahnisElsts/plugin-update-checker/",
+	"license": "MIT",
+	"authors": [
+		{
+			"name": "Yahnis Elsts",
+			"email": "whiteshadow@w-shadow.com",
+			"homepage": "http://w-shadow.com/",
+			"role": "Developer"
+		}
+	],
+	"require": {
+		"php": ">=5.2.0"
+	}
+}
\ No newline at end of file
diff --git a/plugin-update-checker/css/puc-debug-bar.css b/plugin-update-checker/css/puc-debug-bar.css
new file mode 100644
index 0000000..9675685
--- /dev/null
+++ b/plugin-update-checker/css/puc-debug-bar.css
@@ -0,0 +1,62 @@
+.puc-debug-bar-panel pre {
+	margin-top: 0;
+}
+
+/* Style the debug data table to match "widefat" table style used by WordPress. */
+table.puc-debug-data {
+    width: 100%;
+    clear: both;
+    margin: 0;
+
+    border-spacing: 0;
+    background-color: #f9f9f9;
+
+    border-radius: 3px;
+    border: 1px solid #dfdfdf;
+    border-collapse: separate;
+}
+
+table.puc-debug-data * {
+    word-wrap: break-word;
+}
+
+table.puc-debug-data th {
+	width: 11em;
+    padding: 7px 7px 8px;
+    text-align: left;
+
+    font-family: "Georgia", "Times New Roman", "Bitstream Charter", "Times", serif;
+    font-weight: 400;
+    font-size: 14px;
+    line-height: 1.3em;
+    text-shadow: rgba(255, 255, 255, 0.804) 0 1px 0;
+}
+
+table.puc-debug-data td, table.puc-debug-data th {
+    border-width: 1px 0;
+    border-style: solid;
+
+    border-top-color: #fff;
+    border-bottom-color: #dfdfdf;
+
+    text-transform: none;
+}
+
+table.puc-debug-data td {
+    color: #555;
+    font-size: 12px;
+    padding: 4px 7px 2px;
+    vertical-align: top;
+}
+
+.puc-ajax-response {
+	border: 1px solid #dfdfdf;
+	border-radius: 3px;
+	padding: 0.5em;
+	margin: 5px 0;
+	background-color: white;
+}
+
+.puc-ajax-nonce {
+	display: none;
+}
\ No newline at end of file
diff --git a/plugin-update-checker/debug-bar-panel.php b/plugin-update-checker/debug-bar-panel.php
new file mode 100644
index 0000000..f379163
--- /dev/null
+++ b/plugin-update-checker/debug-bar-panel.php
@@ -0,0 +1,135 @@
+<?php
+
+if ( !class_exists('PluginUpdateCheckerPanel', false) && class_exists('Debug_Bar_Panel', false) ) {
+
+/**
+ * A Debug Bar panel for the plugin update checker.
+ */
+class PluginUpdateCheckerPanel extends Debug_Bar_Panel {
+	/** @var PluginUpdateChecker */
+	private $updateChecker;
+
+	public function __construct($updateChecker) {
+		$this->updateChecker = $updateChecker;
+		$title = sprintf(
+			'<span id="puc-debug-menu-link-%s">PUC (%s)</span>',
+			esc_attr($this->updateChecker->slug),
+			$this->updateChecker->slug
+		);
+		parent::Debug_Bar_Panel($title);
+	}
+
+	public function render() {
+		printf(
+			'<div class="puc-debug-bar-panel" id="puc-debug-bar-panel_%1$s" data-slug="%1$s" data-nonce="%2$s">',
+			esc_attr($this->updateChecker->slug),
+			esc_attr(wp_create_nonce('puc-ajax'))
+		);
+
+		$responseBox = '<div class="puc-ajax-response" style="display: none;"></div>';
+
+		echo '<h3>Configuration</h3>';
+		echo '<table class="puc-debug-data">';
+		$this->row('Plugin file', htmlentities($this->updateChecker->pluginFile));
+		$this->row('Slug', htmlentities($this->updateChecker->slug));
+		$this->row('DB option', htmlentities($this->updateChecker->optionName));
+
+		$requestInfoButton = '';
+		if ( function_exists('get_submit_button') ) {
+			$requestInfoButton = get_submit_button('Request Info', 'secondary', 'puc-request-info-button', false, array('id' => 'puc-request-info-button-' . $this->updateChecker->slug));
+		}
+		$this->row('Metadata URL', htmlentities($this->updateChecker->metadataUrl) . ' ' . $requestInfoButton . $responseBox);
+
+		if ( $this->updateChecker->checkPeriod > 0 ) {
+			$this->row('Automatic checks', 'Every ' . $this->updateChecker->checkPeriod . ' hours');
+		} else {
+			$this->row('Automatic checks', 'Disabled');
+		}
+
+		if ( isset($this->updateChecker->throttleRedundantChecks) ) {
+			if ( $this->updateChecker->throttleRedundantChecks && ($this->updateChecker->checkPeriod > 0) ) {
+				$this->row(
+					'Throttling',
+					sprintf(
+						'Enabled. If an update is already available, check for updates every %1$d hours instead of every %2$d hours.',
+						$this->updateChecker->throttledCheckPeriod,
+						$this->updateChecker->checkPeriod
+					)
+				);
+			} else {
+				$this->row('Throttling', 'Disabled');
+			}
+		}
+		echo '</table>';
+
+		echo '<h3>Status</h3>';
+		echo '<table class="puc-debug-data">';
+		$state = $this->updateChecker->getUpdateState();
+		$checkNowButton = '';
+		if ( function_exists('get_submit_button')  ) {
+			$checkNowButton = get_submit_button('Check Now', 'secondary', 'puc-check-now-button', false, array('id' => 'puc-check-now-button-' . $this->updateChecker->slug));
+		}
+
+		if ( isset($state, $state->lastCheck) ) {
+			$this->row('Last check', $this->formatTimeWithDelta($state->lastCheck) . ' ' . $checkNowButton . $responseBox);
+		} else {
+			$this->row('Last check', 'Never');
+		}
+
+		$nextCheck = wp_next_scheduled($this->updateChecker->getCronHookName());
+		$this->row('Next automatic check', $this->formatTimeWithDelta($nextCheck));
+
+		if ( isset($state, $state->checkedVersion) ) {
+			$this->row('Checked version', htmlentities($state->checkedVersion));
+			$this->row('Cached update', $state->update);
+		}
+		$this->row('Update checker class', htmlentities(get_class($this->updateChecker)));
+		echo '</table>';
+
+		$update = $this->updateChecker->getUpdate();
+		if ( $update !== null ) {
+			echo '<h3>An Update Is Available</h3>';
+			echo '<table class="puc-debug-data">';
+			$fields = array('version', 'download_url', 'slug', 'homepage', 'upgrade_notice');
+			foreach($fields as $field) {
+				$this->row(ucwords(str_replace('_', ' ', $field)), htmlentities($update->$field));
+			}
+			echo '</table>';
+		} else {
+			echo '<h3>No updates currently available</h3>';
+		}
+
+		echo '</div>';
+	}
+
+	private function formatTimeWithDelta($unixTime) {
+		if ( empty($unixTime) ) {
+			return 'Never';
+		}
+
+		$delta = time() - $unixTime;
+		$result = human_time_diff(time(), $unixTime);
+		if ( $delta < 0 ) {
+			$result = 'after ' . $result;
+		} else {
+			$result = $result . ' ago';
+		}
+		$result .= ' (' . $this->formatTimestamp($unixTime) . ')';
+		return $result;
+	}
+
+	private function formatTimestamp($unixTime) {
+		return gmdate('Y-m-d H:i:s', $unixTime + (get_option('gmt_offset') * 3600));
+	}
+
+	private function row($name, $value) {
+		if ( is_object($value) || is_array($value) ) {
+			$value = '<pre>' . htmlentities(print_r($value, true)) . '</pre>';
+		} else if ($value === null) {
+			$value = '<code>null</code>';
+		}
+		printf('<tr><th scope="row">%1$s</th> <td>%2$s</td></tr>', $name, $value);
+	}
+}
+
+}
diff --git a/plugin-update-checker/debug-bar-plugin.php b/plugin-update-checker/debug-bar-plugin.php
new file mode 100644
index 0000000..feadc82
--- /dev/null
+++ b/plugin-update-checker/debug-bar-plugin.php
@@ -0,0 +1,102 @@
+<?php
+if ( !class_exists('PucDebugBarPlugin', false) ) {
+
+class PucDebugBarPlugin {
+	/** @var PluginUpdateChecker */
+	private $updateChecker;
+
+	public function __construct($updateChecker) {
+		$this->updateChecker = $updateChecker;
+
+		add_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
+		add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
+
+		add_action('wp_ajax_puc_debug_check_now', array($this, 'ajaxCheckNow'));
+		add_action('wp_ajax_puc_debug_request_info', array($this, 'ajaxRequestInfo'));
+	}
+
+	/**
+	 * Register the PUC Debug Bar panel.
+	 *
+	 * @param array $panels
+	 * @return array
+	 */
+	public function addDebugBarPanel($panels) {
+		require_once dirname(__FILE__) . '/debug-bar-panel.php';
+		if ( current_user_can('update_plugins') && class_exists('PluginUpdateCheckerPanel', false) ) {
+			$panels[] = new PluginUpdateCheckerPanel($this->updateChecker);
+		}
+		return $panels;
+	}
+
+	/**
+	 * Enqueue our Debug Bar scripts and styles.
+	 */
+	public function enqueuePanelDependencies() {
+		wp_enqueue_style(
+			'puc-debug-bar-style',
+			plugins_url( "/css/puc-debug-bar.css", __FILE__ ),
+			array('debug-bar'),
+			'20130927'
+		);
+
+		wp_enqueue_script(
+			'puc-debug-bar-js',
+			plugins_url( "/js/debug-bar.js", __FILE__ ),
+			array('jquery'),
+			'20121026'
+		);
+	}
+
+	/**
+	 * Run an update check and output the result. Useful for making sure that
+	 * the update checking process works as expected.
+	 */
+	public function ajaxCheckNow() {
+		if ( $_POST['slug'] !== $this->updateChecker->slug ) {
+			return;
+		}
+		$this->preAjaxReqest();
+		$update = $this->updateChecker->checkForUpdates();
+		if ( $update !== null ) {
+			echo "An update is available:";
+			echo '<pre>', htmlentities(print_r($update, true)), '</pre>';
+		} else {
+			echo 'No updates found.';
+		}
+		exit;
+	}
+
+	/**
+	 * Request plugin info and output it.
+	 */
+	public function ajaxRequestInfo() {
+		if ( $_POST['slug'] !== $this->updateChecker->slug ) {
+			return;
+		}
+		$this->preAjaxReqest();
+		$info = $this->updateChecker->requestInfo();
+		if ( $info !== null ) {
+			echo 'Successfully retrieved plugin info from the metadata URL:';
+			echo '<pre>', htmlentities(print_r($info, true)), '</pre>';
+		} else {
+			echo 'Failed to retrieve plugin info from the metadata URL.';
+		}
+		exit;
+	}
+
+	/**
+	 * Check access permissions and enable error display (for debugging).
+	 */
+	private function preAjaxReqest() {
+		if ( !current_user_can('update_plugins') ) {
+			die('Access denied');
+		}
+		check_ajax_referer('puc-ajax');
+
+		error_reporting(E_ALL);
+		@ini_set('display_errors','On');
+	}
+}
+
+}
\ No newline at end of file
diff --git a/plugin-update-checker/github-checker.php b/plugin-update-checker/github-checker.php
new file mode 100644
index 0000000..efb7023
--- /dev/null
+++ b/plugin-update-checker/github-checker.php
@@ -0,0 +1,449 @@
+<?php
+
+if ( !class_exists('PucGitHubChecker_2_1', false) ):
+
+class PucGitHubChecker_2_1 extends PluginUpdateChecker_2_1 {
+	/**
+	 * @var string GitHub username.
+	 */
+	protected $userName;
+	/**
+	 * @var string GitHub repository name.
+	 */
+	protected $repositoryName;
+
+	/**
+	 * @var string Either a fully qualified repository URL, or just "user/repo-name".
+	 */
+	protected $repositoryUrl;
+
+	/**
+	 * @var string The branch to use as the latest version. Defaults to "master".
+	 */
+	protected $branch;
+
+	/**
+	 * @var string GitHub authentication token. Optional.
+	 */
+	protected $accessToken;
+
+	public function __construct(
+		$repositoryUrl,
+		$pluginFile,
+		$branch = 'master',
+		$checkPeriod = 12,
+		$optionName = '',
+		$muPluginFile = ''
+	) {
+
+		$this->repositoryUrl = $repositoryUrl;
+		$this->branch = empty($branch) ? 'master' : $branch;
+
+		$path = @parse_url($repositoryUrl, PHP_URL_PATH);
+		if ( preg_match('@^/?(?P<username>[^/]+?)/(?P<repository>[^/#?&]+?)/?$@', $path, $matches) ) {
+			$this->userName = $matches['username'];
+			$this->repositoryName = $matches['repository'];
+		} else {
+			throw new InvalidArgumentException('Invalid GitHub repository URL: "' . $repositoryUrl . '"');
+		}
+
+		parent::__construct($repositoryUrl, $pluginFile, '', $checkPeriod, $optionName, $muPluginFile);
+	}
+
+	/**
+	 * Retrieve details about the latest plugin version from GitHub.
+	 *
+	 * @param array $unusedQueryArgs Unused.
+	 * @return PluginInfo
+	 */
+	public function requestInfo($unusedQueryArgs = array()) {
+		$info = new PluginInfo_2_1();
+		$info->filename = $this->pluginFile;
+		$info->slug = $this->slug;
+		$info->sections = array();
+
+		$this->setInfoFromHeader($this->getPluginHeader(), $info);
+
+		//Figure out which reference (tag or branch) we'll use to get the latest version of the plugin.
+		$ref = $this->branch;
+		if ( $this->branch === 'master' ) {
+			//Use the latest release.
+			$release = $this->getLatestRelease();
+			if ( $release !== null ) {
+				$ref = $release->tag_name;
+				$info->version = ltrim($release->tag_name, 'v'); //Remove the "v" prefix from "v1.2.3".
+				$info->last_updated = $release->created_at;
+				$info->download_url = $release->zipball_url;
+
+				if ( !empty($release->body) ) {
+					$info->sections['changelog'] = $this->parseMarkdown($release->body);
+				}
+				if ( isset($release->assets[0]) ) {
+					$info->downloaded = $release->assets[0]->download_count;
+				}
+			} else {
+				//Failing that, use the tag with the highest version number.
+				$tag = $this->getLatestTag();
+				if ( $tag !== null ) {
+					$ref = $tag->name;
+					$info->version = $tag->name;
+					$info->download_url = $tag->zipball_url;
+				}
+			}
+		}
+
+		if ( empty($info->download_url) ) {
+			$info->download_url = $this->buildArchiveDownloadUrl($ref);
+		}
+
+		//Get headers from the main plugin file in this branch/tag. Its "Version" header and other metadata
+		//are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags.
+		$mainPluginFile = basename($this->pluginFile);
+		$remotePlugin = $this->getRemoteFile($mainPluginFile, $ref);
+		if ( !empty($remotePlugin) ) {
+			$remoteHeader = $this->getFileHeader($remotePlugin);
+			$this->setInfoFromHeader($remoteHeader, $info);
+		}
+
+		//Try parsing readme.txt. If it's formatted according to WordPress.org standards, it will contain
+		//a lot of useful information like the required/tested WP version, changelog, and so on.
+		if ( $this->readmeTxtExistsLocally() ) {
+			$readmeTxt = $this->getRemoteFile('readme.txt', $ref);
+			if ( !empty($readmeTxt) ) {
+				$readme = $this->parseReadme($readmeTxt);
+
+				if ( isset($readme['sections']) ) {
+					$info->sections = array_merge($info->sections, $readme['sections']);
+				}
+				if ( !empty($readme['tested_up_to']) ) {
+					$info->tested = $readme['tested_up_to'];
+				}
+				if ( !empty($readme['requires_at_least']) ) {
+					$info->requires = $readme['requires_at_least'];
+				}
+
+				if ( isset($readme['upgrade_notice'], $readme['upgrade_notice'][$info->version]) ) {
+					$info->upgrade_notice = $readme['upgrade_notice'][$info->version];
+				}
+			}
+		}
+
+		//The changelog might be in a separate file.
+		if ( empty($info->sections['changelog']) ) {
+			$info->sections['changelog'] = $this->getRemoteChangelog($ref);
+			if ( empty($info->sections['changelog']) ) {
+				$info->sections['changelog'] = 'There is no changelog available.';
+			}
+		}
+
+		if ( empty($info->last_updated) ) {
+			//Fetch the latest commit that changed the main plugin file and use it as the "last_updated" date.
+			//It's reasonable to assume that every update will change the version number in that file.
+			$latestCommit = $this->getLatestCommit($mainPluginFile, $ref);
+			if ( $latestCommit !== null ) {
+				$info->last_updated = $latestCommit->commit->author->date;
+			}
+		}
+
+		$info = apply_filters('puc_request_info_result-' . $this->slug, $info, null);
+		return $info;
+	}
+
+	/**
+	 * Get the latest release from GitHub.
+	 *
+	 * @return StdClass|null
+	 */
+	protected function getLatestRelease() {
+		$releases = $this->api('/repos/:user/:repo/releases');
+		if ( is_wp_error($releases) || !is_array($releases) || !isset($releases[0]) ) {
+			return null;
+		}
+
+		$latestRelease = $releases[0];
+		return $latestRelease;
+	}
+
+	/**
+	 * Get the tag that looks like the highest version number.
+	 *
+	 * @return StdClass|null
+	 */
+	protected function getLatestTag() {
+		$tags = $this->api('/repos/:user/:repo/tags');
+
+		if ( is_wp_error($tags) || empty($tags) || !is_array($tags) ) {
+			return null;
+		}
+
+		usort($tags, array($this, 'compareTagNames')); //Sort from highest to lowest.
+		return $tags[0];
+	}
+
+	/**
+	 * Compare two GitHub tags as if they were version number.
+	 *
+	 * @param string $tag1
+	 * @param string $tag2
+	 * @return int
+	 */
+	protected function compareTagNames($tag1, $tag2) {
+		if ( !isset($tag1->name) ) {
+			return 1;
+		}
+		if ( !isset($tag2->name) ) {
+			return -1;
+		}
+		return -version_compare($tag1->name, $tag2->name);
+	}
+
+	/**
+	 * Get the latest commit that changed the specified file.
+	 *
+	 * @param string $filename
+	 * @param string $ref Reference name (e.g. branch or tag).
+	 * @return StdClass|null
+	 */
+	protected function getLatestCommit($filename, $ref = 'master') {
+		$commits = $this->api(
+			'/repos/:user/:repo/commits',
+			array(
+				'path' => $filename,
+				'sha' => $ref,
+			)
+		);
+		if ( !is_wp_error($commits) && is_array($commits) && isset($commits[0]) ) {
+			return $commits[0];
+		}
+		return null;
+	}
+
+	protected function getRemoteChangelog($ref = '') {
+		$filename = $this->getChangelogFilename();
+		if ( empty($filename) ) {
+			return null;
+		}
+
+		$changelog = $this->getRemoteFile($filename, $ref);
+		if ( $changelog === null ) {
+			return null;
+		}
+		return $this->parseMarkdown($changelog);
+	}
+
+	protected function getChangelogFilename() {
+		$pluginDirectory = dirname($this->pluginAbsolutePath);
+		if ( empty($this->pluginAbsolutePath) || !is_dir($pluginDirectory) || ($pluginDirectory === '.') ) {
+			return null;
+		}
+
+		$possibleNames = array('CHANGES.md', 'CHANGELOG.md', 'changes.md', 'changelog.md');
+		$files = scandir($pluginDirectory);
+		$foundNames = array_intersect($possibleNames, $files);
+
+		if ( !empty($foundNames) ) {
+			return reset($foundNames);
+		}
+		return null;
+	}
+
+	/**
+	 * Convert Markdown to HTML.
+	 *
+	 * @param string $markdown
+	 * @return string
+	 */
+	protected function parseMarkdown($markdown) {
+		if ( !class_exists('Parsedown', false) ) {
+			require_once(dirname(__FILE__) . '/vendor/Parsedown.php');
+		}
+
+		$instance = Parsedown::instance();
+		return $instance->text($markdown);
+	}
+
+	/**
+	 * Perform a GitHub API request.
+	 *
+	 * @param string $url
+	 * @param array $queryParams
+	 * @return mixed|WP_Error
+	 */
+	protected function api($url, $queryParams = array()) {
+		$variables = array(
+			'user' => $this->userName,
+			'repo' => $this->repositoryName,
+		);
+		foreach ($variables as $name => $value) {
+			$url = str_replace('/:' . $name, '/' . urlencode($value), $url);
+		}
+		$url = 'https://api.github.com' . $url;
+
+		if ( !empty($this->accessToken) ) {
+			$queryParams['access_token'] = $this->accessToken;
+		}
+		if ( !empty($queryParams) ) {
+			$url = add_query_arg($queryParams, $url);
+		}
+
+		$response = wp_remote_get($url, array('timeout' => 10));
+		if ( is_wp_error($response) ) {
+			return $response;
+		}
+
+		$code = wp_remote_retrieve_response_code($response);
+		$body = wp_remote_retrieve_body($response);
+		if ( $code === 200 ) {
+			$document = json_decode($body);
+			return $document;
+		}
+
+		return new WP_Error(
+			'puc-github-http-error',
+			'GitHub API error. HTTP status: ' . $code
+		);
+	}
+
+	/**
+	 * Set the access token that will be used to make authenticated GitHub API requests.
+	 *
+	 * @param string $accessToken
+	 */
+	public function setAccessToken($accessToken) {
+		$this->accessToken = $accessToken;
+	}
+
+	/**
+	 * Get the contents of a file from a specific branch or tag.
+	 *
+	 * @param string $path File name.
+	 * @param string $ref
+	 * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error.
+	 */
+	protected function getRemoteFile($path, $ref = 'master') {
+		$apiUrl = '/repos/:user/:repo/contents/' . $path;
+		$response = $this->api($apiUrl, array('ref' => $ref));
+
+		if ( is_wp_error($response) || !isset($response->content) || ($response->encoding !== 'base64') ) {
+			return null;
+		}
+		return base64_decode($response->content);
+	}
+
+	/**
+	 * Parse plugin metadata from the header comment.
+	 * This is basically a simplified version of the get_file_data() function from /wp-includes/functions.php.
+	 *
+	 * @param $content
+	 * @return array
+	 */
+	protected function getFileHeader($content) {
+		$headers = array(
+			'Name' => 'Plugin Name',
+			'PluginURI' => 'Plugin URI',
+			'Version' => 'Version',
+			'Description' => 'Description',
+			'Author' => 'Author',
+			'AuthorURI' => 'Author URI',
+			'TextDomain' => 'Text Domain',
+			'DomainPath' => 'Domain Path',
+			'Network' => 'Network',
+
+			//The newest WordPress version that this plugin requires or has been tested with.
+			//We support several different formats for compatibility with other libraries.
+			'Tested WP' => 'Tested WP',
+			'Requires WP' => 'Requires WP',
+			'Tested up to' => 'Tested up to',
+			'Requires at least' => 'Requires at least',
+		);
+
+		$content = str_replace("\r", "\n", $content); //Normalize line endings.
+		$results = array();
+		foreach ($headers as $field => $name) {
+			$success = preg_match('/^[ \t\/*#@]*' . preg_quote($name, '/') . ':(.*)$/mi', $content, $matches);
+			if ( ($success === 1) && $matches[1] ) {
+				$results[$field] = _cleanup_header_comment($matches[1]);
+			} else {
+				$results[$field] = '';
+			}
+		}
+
+		return $results;
+	}
+
+	/**
+	 * Copy plugin metadata from a file header to a PluginInfo object.
+	 *
+	 * @param array $fileHeader
+	 * @param PluginInfo_2_1 $pluginInfo
+	 */
+	protected function setInfoFromHeader($fileHeader, $pluginInfo) {
+		$headerToPropertyMap = array(
+			'Version' => 'version',
+			'Name' => 'name',
+			'PluginURI' => 'homepage',
+			'Author' => 'author',
+			'AuthorName' => 'author',
+			'AuthorURI' => 'author_homepage',
+
+			'Requires WP' => 'requires',
+			'Tested WP' => 'tested',
+			'Requires at least' => 'requires',
+			'Tested up to' => 'tested',
+		);
+		foreach ($headerToPropertyMap as $headerName => $property) {
+			if ( isset($fileHeader[$headerName]) && !empty($fileHeader[$headerName]) ) {
+				$pluginInfo->$property = $fileHeader[$headerName];
+			}
+		}
+
+		if ( !isset($pluginInfo->sections) ) {
+			$pluginInfo->sections = array();
+		}
+		if ( !empty($fileHeader['Description']) ) {
+			$pluginInfo->sections['description'] = $fileHeader['Description'];
+		}
+	}
+
+	protected function parseReadme($content) {
+		if ( !class_exists('PucReadmeParser', false) ) {
+			require_once(dirname(__FILE__) . '/vendor/readme-parser.php');
+		}
+		$parser = new PucReadmeParser();
+		return $parser->parse_readme_contents($content);
+	}
+
+	/**
+	 * Check if the currently installed version has a readme.txt file.
+	 *
+	 * @return bool
+	 */
+	protected function readmeTxtExistsLocally() {
+		$pluginDirectory = dirname($this->pluginAbsolutePath);
+		if ( empty($this->pluginAbsolutePath) || !is_dir($pluginDirectory) || ($pluginDirectory === '.') ) {
+			return false;
+		}
+		return is_file($pluginDirectory . '/readme.txt');
+	}
+
+	/**
+	 * Generate a URL to download a ZIP archive of the specified branch/tag/etc.
+	 *
+	 * @param string $ref
+	 * @return string
+	 */
+	protected function buildArchiveDownloadUrl($ref = 'master') {
+		$url = sprintf(
+			'https://api.github.com/repos/%1$s/%2$s/zipball/%3$s',
+			urlencode($this->userName),
+			urlencode($this->repositoryName),
+			urlencode($ref)
+		);
+		if ( !empty($this->accessToken) ) {
+			$url = add_query_arg('access_token', $this->accessToken, $url);
+		}
+		return $url;
+	}
+}
+
+endif;
\ No newline at end of file
diff --git a/plugin-update-checker/js/debug-bar.js b/plugin-update-checker/js/debug-bar.js
new file mode 100644
index 0000000..758ee79
--- /dev/null
+++ b/plugin-update-checker/js/debug-bar.js
@@ -0,0 +1,52 @@
+jQuery(function($) {
+
+	function runAjaxAction(button, action) {
+		button = $(button);
+		var panel = button.closest('.puc-debug-bar-panel');
+		var responseBox = button.closest('td').find('.puc-ajax-response');
+
+		responseBox.text('Processing...').show();
+		$.post(
+			ajaxurl,
+			{
+				action  : action,
+				slug    : panel.data('slug'),
+				_wpnonce: panel.data('nonce')
+			},
+			function(data) {
+				responseBox.html(data);
+			},
+			'html'
+		);
+	}
+
+	$('.puc-debug-bar-panel input[name="puc-check-now-button"]').click(function() {
+		runAjaxAction(this, 'puc_debug_check_now');
+		return false;
+	});
+
+	$('.puc-debug-bar-panel input[name="puc-request-info-button"]').click(function() {
+		runAjaxAction(this, 'puc_debug_request_info');
+		return false;
+	});
+
+
+	// Debug Bar uses the panel class name as part of its link and container IDs. This means we can
+	// end up with multiple identical IDs if more than one plugin uses the update checker library.
+	// Fix it by replacing the class name with the plugin slug.
+	var panels = $('#debug-menu-targets').find('.puc-debug-bar-panel');
+	panels.each(function(index) {
+		var panel = $(this);
+		var slug = panel.data('slug');
+		var target = panel.closest('.debug-menu-target');
+
+		//Change the panel wrapper ID.
+		target.attr('id', 'debug-menu-target-puc-' + slug);
+
+		//Change the menu link ID as well and point it at the new target ID.
+		$('#puc-debug-menu-link-' + panel.data('slug'))
+			.closest('.debug-menu-link')
+			.attr('id', 'debug-menu-link-puc-' + slug)
+			.attr('href', '#' + target.attr('id'));
+	});
+});
\ No newline at end of file
diff --git a/plugin-update-checker/license.txt b/plugin-update-checker/license.txt
new file mode 100644
index 0000000..befb759
--- /dev/null
+++ b/plugin-update-checker/license.txt
@@ -0,0 +1,7 @@
+Copyright (c) 2014 Jānis Elsts
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/plugin-update-checker/plugin-update-checker.php b/plugin-update-checker/plugin-update-checker.php
new file mode 100644
index 0000000..8a5c92f
--- /dev/null
+++ b/plugin-update-checker/plugin-update-checker.php
@@ -0,0 +1,1215 @@
+<?php
+/**
+ * Plugin Update Checker Library 2.1.0
+ * http://w-shadow.com/
+ * 
+ * Copyright 2015 Janis Elsts
+ * Released under the MIT license. See license.txt for details.
+ */
+
+if ( !class_exists('PluginUpdateChecker_2_1', false) ):
+
+/**
+ * A custom plugin update checker. 
+ * 
+ * @author Janis Elsts
+ * @copyright 2015
+ * @version 2.1
+ * @access public
+ */
+class PluginUpdateChecker_2_1 {
+	public $metadataUrl = ''; //The URL of the plugin's metadata file.
+	public $pluginAbsolutePath = ''; //Full path of the main plugin file.
+	public $pluginFile = '';  //Plugin filename relative to the plugins directory. Many WP APIs use this to identify plugins.
+	public $slug = '';        //Plugin slug.
+	public $checkPeriod = 12; //How often to check for updates (in hours).
+	public $optionName = '';  //Where to store the update info.
+	public $muPluginFile = ''; //For MU plugins, the plugin filename relative to the mu-plugins directory.
+
+	public $debugMode = false; //Set to TRUE to enable error reporting. Errors are raised using trigger_error()
+                               //and should be logged to the standard PHP error log.
+
+	public $throttleRedundantChecks = false; //Check less often if we already know that an update is available.
+	public $throttledCheckPeriod = 72;
+
+	private $cronHook = null;
+	private $debugBarPlugin = null;
+	private $cachedInstalledVersion = null;
+
+	/**
+	 * Class constructor.
+	 *
+	 * @param string $metadataUrl The URL of the plugin's metadata file.
+	 * @param string $pluginFile Fully qualified path to the main plugin file.
+	 * @param string $slug The plugin's 'slug'. If not specified, the filename part of $pluginFile sans '.php' will be used as the slug.
+	 * @param integer $checkPeriod How often to check for updates (in hours). Defaults to checking every 12 hours. Set to 0 to disable automatic update checks.
+	 * @param string $optionName Where to store book-keeping info about update checks. Defaults to 'external_updates-$slug'.
+	 * @param string $muPluginFile Optional. The plugin filename relative to the mu-plugins directory.
+	 */
+	public function __construct($metadataUrl, $pluginFile, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = ''){
+		$this->metadataUrl = $metadataUrl;
+		$this->pluginAbsolutePath = $pluginFile;
+		$this->pluginFile = plugin_basename($this->pluginAbsolutePath);
+		$this->muPluginFile = $muPluginFile;
+		$this->checkPeriod = $checkPeriod;
+		$this->slug = $slug;
+		$this->optionName = $optionName;
+		$this->debugMode = defined('WP_DEBUG') && WP_DEBUG;
+
+		//If no slug is specified, use the name of the main plugin file as the slug.
+		//For example, 'my-cool-plugin/cool-plugin.php' becomes 'cool-plugin'.
+		if ( empty($this->slug) ){
+			$this->slug = basename($this->pluginFile, '.php');
+		}
+		
+		if ( empty($this->optionName) ){
+			$this->optionName = 'external_updates-' . $this->slug;
+		}
+
+		//Backwards compatibility: If the plugin is a mu-plugin but no $muPluginFile is specified, assume
+		//it's the same as $pluginFile given that it's not in a subdirectory (WP only looks in the base dir).
+		if ( empty($this->muPluginFile) && (strpbrk($this->pluginFile, '/\\') === false) && $this->isMuPlugin() ) {
+			$this->muPluginFile = $this->pluginFile;
+		}
+		
+		$this->installHooks();
+	}
+	
+	/**
+	 * Install the hooks required to run periodic update checks and inject update info 
+	 * into WP data structures. 
+	 * 
+	 * @return void
+	 */
+	protected function installHooks(){
+		//Override requests for plugin information
+		add_filter('plugins_api', array($this, 'injectInfo'), 20, 3);
+		
+		//Insert our update info into the update array maintained by WP
+		add_filter('site_transient_update_plugins', array($this,'injectUpdate')); //WP 3.0+
+		add_filter('transient_update_plugins', array($this,'injectUpdate')); //WP 2.8+
+
+		add_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10, 2);
+		add_action('admin_init', array($this, 'handleManualCheck'));
+		add_action('all_admin_notices', array($this, 'displayManualCheckResult'));
+
+		//Clear the version number cache when something - anything - is upgraded or WP clears the update cache.
+		add_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
+		add_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
+
+		//Set up the periodic update checks
+		$this->cronHook = 'check_plugin_updates-' . $this->slug;
+		if ( $this->checkPeriod > 0 ){
+			
+			//Trigger the check via Cron.
+			//Try to use one of the default schedules if possible as it's less likely to conflict
+			//with other plugins and their custom schedules.
+			$defaultSchedules = array(
+				1  => 'hourly',
+				12 => 'twicedaily',
+				24 => 'daily',
+			);
+			if ( array_key_exists($this->checkPeriod, $defaultSchedules) ) {
+				$scheduleName = $defaultSchedules[$this->checkPeriod];
+			} else {
+				//Use a custom cron schedule.
+				$scheduleName = 'every' . $this->checkPeriod . 'hours';
+				add_filter('cron_schedules', array($this, '_addCustomSchedule'));
+			}
+
+			if ( !wp_next_scheduled($this->cronHook) && !defined('WP_INSTALLING') ) {
+				wp_schedule_event(time(), $scheduleName, $this->cronHook);
+			}
+			add_action($this->cronHook, array($this, 'maybeCheckForUpdates'));
+			
+			register_deactivation_hook($this->pluginFile, array($this, '_removeUpdaterCron'));
+			
+			//In case Cron is disabled or unreliable, we also manually trigger 
+			//the periodic checks while the user is browsing the Dashboard. 
+			add_action( 'admin_init', array($this, 'maybeCheckForUpdates') );
+
+			//Like WordPress itself, we check more often on certain pages.
+			/** @see wp_update_plugins */
+			add_action('load-update-core.php', array($this, 'maybeCheckForUpdates'));
+			add_action('load-plugins.php', array($this, 'maybeCheckForUpdates'));
+			add_action('load-update.php', array($this, 'maybeCheckForUpdates'));
+			//This hook fires after a bulk update is complete.
+			add_action('upgrader_process_complete', array($this, 'maybeCheckForUpdates'), 11, 0);
+
+		} else {
+			//Periodic checks are disabled.
+			wp_clear_scheduled_hook($this->cronHook);
+		}
+
+		if ( did_action('plugins_loaded') ) {
+			$this->initDebugBarPanel();
+		} else {
+			add_action('plugins_loaded', array($this, 'initDebugBarPanel'));
+		}
+
+		//Rename the update directory to be the same as the existing directory.
+		add_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10, 3);
+	}
+	
+	/**
+	 * Add our custom schedule to the array of Cron schedules used by WP.
+	 * 
+	 * @param array $schedules
+	 * @return array
+	 */
+	public function _addCustomSchedule($schedules){
+		if ( $this->checkPeriod && ($this->checkPeriod > 0) ){
+			$scheduleName = 'every' . $this->checkPeriod . 'hours';
+			$schedules[$scheduleName] = array(
+				'interval' => $this->checkPeriod * 3600, 
+				'display' => sprintf('Every %d hours', $this->checkPeriod),
+			);
+		}
+		return $schedules;
+	}
+
+	/**
+	 * Remove the scheduled cron event that the library uses to check for updates.
+	 *
+	 * @return void
+	 */
+	public function _removeUpdaterCron(){
+		wp_clear_scheduled_hook($this->cronHook);
+	}
+
+	/**
+	 * Get the name of the update checker's WP-cron hook. Mostly useful for debugging.
+	 *
+	 * @return string
+	 */
+	public function getCronHookName() {
+		return $this->cronHook;
+	}
+	
+	/**
+	 * Retrieve plugin info from the configured API endpoint.
+	 * 
+	 * @uses wp_remote_get()
+	 * 
+	 * @param array $queryArgs Additional query arguments to append to the request. Optional.
+	 * @return PluginInfo
+	 */
+	public function requestInfo($queryArgs = array()){
+		//Query args to append to the URL. Plugins can add their own by using a filter callback (see addQueryArgFilter()).
+		$installedVersion = $this->getInstalledVersion();
+		$queryArgs['installed_version'] = ($installedVersion !== null) ? $installedVersion : '';
+		$queryArgs = apply_filters('puc_request_info_query_args-'.$this->slug, $queryArgs);
+		
+		//Various options for the wp_remote_get() call. Plugins can filter these, too.
+		$options = array(
+			'timeout' => 10, //seconds
+			'headers' => array(
+				'Accept' => 'application/json'
+			),
+		);
+		$options = apply_filters('puc_request_info_options-'.$this->slug, $options);
+		
+		//The plugin info should be at 'http://your-api.com/url/here/$slug/info.json'
+		$url = $this->metadataUrl; 
+		if ( !empty($queryArgs) ){
+			$url = add_query_arg($queryArgs, $url);
+		}
+		
+		$result = wp_remote_get(
+			$url,
+			$options
+		);
+
+		//Try to parse the response
+		$pluginInfo = null;
+		if ( !is_wp_error($result) && isset($result['response']['code']) && ($result['response']['code'] == 200) && !empty($result['body']) ){
+			$pluginInfo = PluginInfo_2_1::fromJson($result['body'], $this->debugMode);
+			$pluginInfo->filename = $this->pluginFile;
+			$pluginInfo->slug = $this->slug;
+		} else if ( $this->debugMode ) {
+			$message = sprintf("The URL %s does not point to a valid plugin metadata file. ", $url);
+			if ( is_wp_error($result) ) {
+				$message .= "WP HTTP error: " . $result->get_error_message();
+			} else if ( isset($result['response']['code']) ) {
+				$message .= "HTTP response code is " . $result['response']['code'] . " (expected: 200)";
+			} else {
+				$message .= "wp_remote_get() returned an unexpected result.";
+			}
+			trigger_error($message, E_USER_WARNING);
+		}
+
+		$pluginInfo = apply_filters('puc_request_info_result-'.$this->slug, $pluginInfo, $result);
+		return $pluginInfo;
+	}
+
+	/**
+	 * Retrieve the latest update (if any) from the configured API endpoint.
+	 *
+	 * @uses PluginUpdateChecker::requestInfo()
+	 *
+	 * @return PluginUpdate An instance of PluginUpdate, or NULL when no updates are available.
+	 */
+	public function requestUpdate(){
+		//For the sake of simplicity, this function just calls requestInfo() 
+		//and transforms the result accordingly.
+		$pluginInfo = $this->requestInfo(array('checking_for_updates' => '1'));
+		if ( $pluginInfo == null ){
+			return null;
+		}
+		return PluginUpdate_2_1::fromPluginInfo($pluginInfo);
+	}
+	
+	/**
+	 * Get the currently installed version of the plugin.
+	 * 
+	 * @return string Version number.
+	 */
+	public function getInstalledVersion(){
+		if ( isset($this->cachedInstalledVersion) ) {
+			return $this->cachedInstalledVersion;
+		}
+
+		$pluginHeader = $this->getPluginHeader();
+		if ( isset($pluginHeader['Version']) ) {
+			$this->cachedInstalledVersion = $pluginHeader['Version'];
+			return $pluginHeader['Version'];
+		} else {
+			//This can happen if the filename points to something that is not a plugin.
+			if ( $this->debugMode ) {
+				trigger_error(
+					sprintf(
+						"Can't to read the Version header for '%s'. The filename is incorrect or is not a plugin.",
+						$this->pluginFile
+					),
+					E_USER_WARNING
+				);
+			}
+			return null;
+		}
+	}
+
+	/**
+	 * Get plugin's metadata from its file header.
+	 *
+	 * @return array
+	 */
+	protected function getPluginHeader() {
+		if ( !is_file($this->pluginAbsolutePath) ) {
+			//This can happen if the plugin filename is wrong.
+			if ( $this->debugMode ) {
+				trigger_error(
+					sprintf(
+						"Can't to read the plugin header for '%s'. The file does not exist.",
+						$this->pluginFile
+					),
+					E_USER_WARNING
+				);
+			}
+			return array();
+		}
+
+		if ( !function_exists('get_plugin_data') ){
+			require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
+		}
+		return get_plugin_data($this->pluginAbsolutePath, false, false);
+	}
+
+	/**
+	 * Check for plugin updates.
+	 * The results are stored in the DB option specified in $optionName.
+	 *
+	 * @return PluginUpdate|null
+	 */
+	public function checkForUpdates(){
+		$installedVersion = $this->getInstalledVersion();
+		//Fail silently if we can't find the plugin or read its header.
+		if ( $installedVersion === null ) {
+			if ( $this->debugMode ) {
+				trigger_error(
+					sprintf('Skipping update check for %s - installed version unknown.', $this->pluginFile),
+					E_USER_WARNING
+				);
+			}
+			return null;
+		}
+
+		$state = $this->getUpdateState();
+		if ( empty($state) ){
+			$state = new StdClass;
+			$state->lastCheck = 0;
+			$state->checkedVersion = '';
+			$state->update = null;
+		}
+		
+		$state->lastCheck = time();
+		$state->checkedVersion = $installedVersion;
+		$this->setUpdateState($state); //Save before checking in case something goes wrong 
+		
+		$state->update = $this->requestUpdate();
+		$this->setUpdateState($state);
+
+		return $this->getUpdate();
+	}
+	
+	/**
+	 * Check for updates if the configured check interval has already elapsed.
+	 * Will use a shorter check interval on certain admin pages like "Dashboard -> Updates" or when doing cron.
+	 *
+	 * You can override the default behaviour by using the "puc_check_now-$slug" filter.
+	 * The filter callback will be passed three parameters:
+	 *     - Current decision. TRUE = check updates now, FALSE = don't check now.
+	 *     - Last check time as a Unix timestamp.
+	 *     - Configured check period in hours.
+	 * Return TRUE to check for updates immediately, or FALSE to cancel.
+	 *
+	 * This method is declared public because it's a hook callback. Calling it directly is not recommended.
+	 */
+	public function maybeCheckForUpdates(){
+		if ( empty($this->checkPeriod) ){
+			return;
+		}
+
+		$currentFilter = current_filter();
+		if ( in_array($currentFilter, array('load-update-core.php', 'upgrader_process_complete')) ) {
+			//Check more often when the user visits "Dashboard -> Updates" or does a bulk update.
+			$timeout = 60;
+		} else if ( in_array($currentFilter, array('load-plugins.php', 'load-update.php')) ) {
+			//Also check more often on the "Plugins" page and /wp-admin/update.php.
+			$timeout = 3600;
+		} else if ( $this->throttleRedundantChecks && ($this->getUpdate() !== null) ) {
+			//Check less frequently if it's already known that an update is available.
+			$timeout = $this->throttledCheckPeriod * 3600;
+		} else if ( defined('DOING_CRON') && constant('DOING_CRON') ) {
+			//WordPress cron schedules are not exact, so lets do an update check even
+			//if slightly less than $checkPeriod hours have elapsed since the last check.
+			$cronFuzziness = 20 * 60;
+			$timeout = $this->checkPeriod * 3600 - $cronFuzziness;
+		} else {
+			$timeout = $this->checkPeriod * 3600;
+		}
+
+		$state = $this->getUpdateState();
+		$shouldCheck =
+			empty($state) ||
+			!isset($state->lastCheck) ||
+			( (time() - $state->lastCheck) >= $timeout );
+
+		//Let plugin authors substitute their own algorithm.
+		$shouldCheck = apply_filters(
+			'puc_check_now-' . $this->slug,
+			$shouldCheck,
+			(!empty($state) && isset($state->lastCheck)) ? $state->lastCheck : 0,
+			$this->checkPeriod
+		);
+
+		if ( $shouldCheck ){
+			$this->checkForUpdates();
+		}
+	}
+	
+	/**
+	 * Load the update checker state from the DB.
+	 *  
+	 * @return StdClass|null
+	 */
+	public function getUpdateState() {
+		$state = get_site_option($this->optionName, null);
+		if ( empty($state) || !is_object($state)) {
+			$state = null;
+		}
+
+		if ( !empty($state) && isset($state->update) && is_object($state->update) ){
+			$state->update = PluginUpdate_2_1::fromObject($state->update);
+		}
+		return $state;
+	}
+	
+	
+	/**
+	 * Persist the update checker state to the DB.
+	 * 
+	 * @param StdClass $state
+	 * @return void
+	 */
+	private function setUpdateState($state) {
+		if ( isset($state->update) && is_object($state->update) && method_exists($state->update, 'toStdClass') ) {
+			$update = $state->update; /** @var PluginUpdate $update */
+			$state->update = $update->toStdClass();
+		}
+		update_site_option($this->optionName, $state);
+	}
+
+	/**
+	 * Reset update checker state - i.e. last check time, cached update data and so on.
+	 *
+	 * Call this when your plugin is being uninstalled, or if you want to
+	 * clear the update cache.
+	 */
+	public function resetUpdateState() {
+		delete_site_option($this->optionName);
+	}
+	
+	/**
+	 * Intercept plugins_api() calls that request information about our plugin and 
+	 * use the configured API endpoint to satisfy them. 
+	 * 
+	 * @see plugins_api()
+	 * 
+	 * @param mixed $result
+	 * @param string $action
+	 * @param array|object $args
+	 * @return mixed
+	 */
+	public function injectInfo($result, $action = null, $args = null){
+    	$relevant = ($action == 'plugin_information') && isset($args->slug) && (
+			($args->slug == $this->slug) || ($args->slug == dirname($this->pluginFile))
+		);
+		if ( !$relevant ){
+			return $result;
+		}
+		
+		$pluginInfo = $this->requestInfo();
+		$pluginInfo = apply_filters('puc_pre_inject_info-' . $this->slug, $pluginInfo);
+		if ($pluginInfo){
+			return $pluginInfo->toWpFormat();
+		}
+				
+		return $result;
+	}
+	
+	/**
+	 * Insert the latest update (if any) into the update list maintained by WP.
+	 * 
+	 * @param StdClass $updates Update list.
+	 * @return StdClass Modified update list.
+	 */
+	public function injectUpdate($updates){
+		//Is there an update to insert?
+		$update = $this->getUpdate();
+
+		//No update notifications for mu-plugins unless explicitly enabled. The MU plugin file
+		//is usually different from the main plugin file so the update wouldn't show up properly anyway.
+		if ( !empty($update) && empty($this->muPluginFile) && $this->isMuPlugin() ) {
+			$update = null;
+		}
+
+		if ( !empty($update) ) {
+			//Let plugins filter the update info before it's passed on to WordPress.
+			$update = apply_filters('puc_pre_inject_update-' . $this->slug, $update);
+			if ( !is_object($updates) ) {
+				$updates = new StdClass();
+				$updates->response = array();
+			}
+
+			$wpUpdate = $update->toWpFormat();
+			$pluginFile = $this->pluginFile;
+
+			if ( $this->isMuPlugin() ) {
+				//WP does not support automatic update installation for mu-plugins, but we can still display a notice.
+				$wpUpdate->package = null;
+				$pluginFile = $this->muPluginFile;
+			}
+			$updates->response[$pluginFile] = $wpUpdate;
+
+		} else if ( isset($updates, $updates->response) ) {
+			unset($updates->response[$this->pluginFile]);
+			if ( !empty($this->muPluginFile) ) {
+				unset($updates->response[$this->muPluginFile]);
+			}
+		}
+
+		return $updates;
+	}
+
+	/**
+	 * Rename the update directory to match the existing plugin directory.
+	 *
+	 * When WordPress installs a plugin or theme update, it assumes that the ZIP file will contain
+	 * exactly one directory, and that the directory name will be the same as the directory where
+	 * the plugin/theme is currently installed.
+	 *
+	 * GitHub and other repositories provide ZIP downloads, but they often use directory names like
+	 * "project-branch" or "project-tag-hash". We need to change the name to the actual plugin folder.
+	 *
+	 * @param string $source The directory to copy to /wp-content/plugins. Usually a subdirectory of $remoteSource.
+	 * @param string $remoteSource WordPress has extracted the update to this directory.
+	 * @param WP_Upgrader $upgrader
+	 * @return string|WP_Error
+	 */
+	function fixDirectoryName($source, $remoteSource, $upgrader) {
+		global $wp_filesystem; /** @var WP_Filesystem_Base $wp_filesystem */
+
+		//Basic sanity checks.
+		if ( !isset($source, $remoteSource, $upgrader, $upgrader->skin, $wp_filesystem) ) {
+			return $source;
+		}
+
+		//Figure out which plugin is being upgraded.
+		$pluginFile = null;
+		$skin = $upgrader->skin;
+		if ( $skin instanceof Plugin_Upgrader_Skin ) {
+			if ( isset($skin->plugin) && is_string($skin->plugin) && ($skin->plugin !== '') ) {
+				$pluginFile = $skin->plugin;
+			}
+		} elseif ( ($skin instanceof Bulk_Plugin_Upgrader_Skin) || ($skin instanceof Automatic_Upgrader_Skin) ) {
+			//This case is tricky because Bulk_Plugin_Upgrader_Skin doesn't actually store the plugin
+			//filename anywhere. Instead, it has the plugin headers in $plugin_info. So the best we can
+			//do is compare those headers to the headers of installed plugins.
+			if ( isset($skin->plugin_info) && is_array($skin->plugin_info) ) {
+				if ( !function_exists('get_plugins') ){
+					require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
+				}
+
+				$installedPlugins = get_plugins();
+				$matches = array();
+				foreach($installedPlugins as $pluginBasename => $headers) {
+					$diff1 = array_diff_assoc($headers, $skin->plugin_info);
+					$diff2 = array_diff_assoc($skin->plugin_info, $headers);
+					if ( empty($diff1) && empty($diff2) ) {
+						$matches[] = $pluginBasename;
+					}
+				}
+
+				//It's possible (though very unlikely) that there could be two plugins with identical
+				//headers. In that case, we can't unambiguously identify the plugin that's being upgraded.
+				if ( count($matches) !== 1 ) {
+					return $source;
+				}
+
+				$pluginFile = reset($matches);
+			}
+		}
+
+		//If WordPress is upgrading anything other than our plugin, leave the directory name unchanged.
+		if ( empty($pluginFile) || ($pluginFile !== $this->pluginFile) ) {
+			return $source;
+		}
+
+		//Rename the source to match the existing plugin directory.
+		$pluginDirectoryName = dirname($this->pluginFile);
+		if ( ($pluginDirectoryName === '.') || ($pluginDirectoryName === '/') ) {
+			return $source;
+		}
+		$correctedSource = trailingslashit($remoteSource) . $pluginDirectoryName . '/';
+		if ( $source !== $correctedSource ) {
+			//The update archive should contain a single directory that contains the rest of plugin files. Otherwise,
+			//WordPress will try to copy the entire working directory ($source == $remoteSource). We can't rename
+			//$remoteSource because that would break WordPress code that cleans up temporary files after update.
+			$sourceFiles = $wp_filesystem->dirlist($remoteSource);
+			if ( is_array($sourceFiles) ) {
+				$sourceFiles = array_keys($sourceFiles);
+				$firstFilePath = trailingslashit($remoteSource) . $sourceFiles[0];
+
+				if ( (count($sourceFiles) > 1) || (!$wp_filesystem->is_dir($firstFilePath)) ) {
+					return new WP_Error(
+						'puc-incorrect-directory-structure',
+						sprintf(
+							'The directory structure of the update is incorrect. All plugin files should be inside ' .
+							'a directory named <span class="code">%s</span>, not at the root of the ZIP file.',
+							htmlentities($this->slug)
+						)
+					);
+				}
+			}
+
+			$upgrader->skin->feedback(sprintf(
+				'Renaming %s to %s&#8230;',
+				'<span class="code">' . basename($source) . '</span>',
+				'<span class="code">' . $pluginDirectoryName . '</span>'
+			));
+
+			if ( $wp_filesystem->move($source, $correctedSource, true) ) {
+				$upgrader->skin->feedback('Plugin directory successfully renamed.');
+				return $correctedSource;
+			} else {
+				return new WP_Error(
+					'puc-rename-failed',
+					'Unable to rename the update to match the existing plugin directory.'
+				);
+			}
+		}
+
+		return $source;
+	}
+
+
+	/**
+	 * Get the details of the currently available update, if any.
+	 *
+	 * If no updates are available, or if the last known update version is below or equal
+	 * to the currently installed version, this method will return NULL.
+	 *
+	 * Uses cached update data. To retrieve update information straight from
+	 * the metadata URL, call requestUpdate() instead.
+	 *
+	 * @return PluginUpdate|null
+	 */
+	public function getUpdate() {
+		$state = $this->getUpdateState(); /** @var StdClass $state */
+
+		//Is there an update available insert?
+		if ( !empty($state) && isset($state->update) && !empty($state->update) ){
+			$update = $state->update;
+			//Check if the update is actually newer than the currently installed version.
+			$installedVersion = $this->getInstalledVersion();
+			if ( ($installedVersion !== null) && version_compare($update->version, $installedVersion, '>') ){
+				$update->filename = $this->pluginFile;
+				return $update;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Add a "Check for updates" link to the plugin row in the "Plugins" page. By default,
+	 * the new link will appear after the "Visit plugin site" link.
+	 *
+	 * You can change the link text by using the "puc_manual_check_link-$slug" filter.
+	 * Returning an empty string from the filter will disable the link.
+	 *
+	 * @param array $pluginMeta Array of meta links.
+	 * @param string $pluginFile
+	 * @return array
+	 */
+	public function addCheckForUpdatesLink($pluginMeta, $pluginFile) {
+		$isRelevant = ($pluginFile == $this->pluginFile)
+		              || (!empty($this->muPluginFile) && $pluginFile == $this->muPluginFile);
+
+		if ( $isRelevant && current_user_can('update_plugins') ) {
+			$linkUrl = wp_nonce_url(
+				add_query_arg(
+					array(
+						'puc_check_for_updates' => 1,
+						'puc_slug' => $this->slug,
+					),
+					is_network_admin() ? network_admin_url('plugins.php') : admin_url('plugins.php')
+				),
+				'puc_check_for_updates'
+			);
+
+			$linkText = apply_filters('puc_manual_check_link-' . $this->slug, 'Check for updates');
+			if ( !empty($linkText) ) {
+				$pluginMeta[] = sprintf('<a href="%s">%s</a>', esc_attr($linkUrl), $linkText);
+			}
+		}
+		return $pluginMeta;
+	}
+
+	/**
+	 * Check for updates when the user clicks the "Check for updates" link.
+	 * @see self::addCheckForUpdatesLink()
+	 *
+	 * @return void
+	 */
+	public function handleManualCheck() {
+		$shouldCheck =
+			   isset($_GET['puc_check_for_updates'], $_GET['puc_slug'])
+			&& $_GET['puc_slug'] == $this->slug
+			&& current_user_can('update_plugins')
+			&& check_admin_referer('puc_check_for_updates');
+
+		if ( $shouldCheck ) {
+			$update = $this->checkForUpdates();
+			$status = ($update === null) ? 'no_update' : 'update_available';
+			wp_redirect(add_query_arg(
+					array(
+					     'puc_update_check_result' => $status,
+					     'puc_slug' => $this->slug,
+					),
+					is_network_admin() ? network_admin_url('plugins.php') : admin_url('plugins.php')
+			));
+		}
+	}
+
+	/**
+	 * Display the results of a manual update check.
+	 * @see self::handleManualCheck()
+	 *
+	 * You can change the result message by using the "puc_manual_check_message-$slug" filter.
+	 */
+	public function displayManualCheckResult() {
+		if ( isset($_GET['puc_update_check_result'], $_GET['puc_slug']) && ($_GET['puc_slug'] == $this->slug) ) {
+			$status = strval($_GET['puc_update_check_result']);
+			if ( $status == 'no_update' ) {
+				$message = 'This plugin is up to date.';
+			} else if ( $status == 'update_available' ) {
+				$message = 'A new version of this plugin is available.';
+			} else {
+				$message = sprintf('Unknown update checker status "%s"', htmlentities($status));
+			}
+			printf(
+				'<div class="updated"><p>%s</p></div>',
+				apply_filters('puc_manual_check_message-' . $this->slug, $message, $status)
+			);
+		}
+	}
+
+	/**
+	 * Check if the plugin file is inside the mu-plugins directory.
+	 *
+	 * @return bool
+	 */
+	protected function isMuPlugin() {
+		static $cachedResult = null;
+
+		if ( $cachedResult === null ) {
+			//Convert both paths to the canonical form before comparison.
+			$muPluginDir = realpath(WPMU_PLUGIN_DIR);
+			$pluginPath  = realpath($this->pluginAbsolutePath);
+
+			$cachedResult = (strpos($pluginPath, $muPluginDir) === 0);
+		}
+
+		return $cachedResult;
+	}
+
+	/**
+	 * Clear the cached plugin version. This method can be set up as a filter (hook) and will
+	 * return the filter argument unmodified.
+	 *
+	 * @param mixed $filterArgument
+	 * @return mixed
+	 */
+	public function clearCachedVersion($filterArgument = null) {
+		$this->cachedInstalledVersion = null;
+		return $filterArgument;
+	}
+
+	/**
+	 * Register a callback for filtering query arguments. 
+	 * 
+	 * The callback function should take one argument - an associative array of query arguments.
+	 * It should return a modified array of query arguments.
+	 * 
+	 * @uses add_filter() This method is a convenience wrapper for add_filter().
+	 * 
+	 * @param callable $callback
+	 * @return void
+	 */
+	public function addQueryArgFilter($callback){
+		add_filter('puc_request_info_query_args-'.$this->slug, $callback);
+	}
+	
+	/**
+	 * Register a callback for filtering arguments passed to wp_remote_get().
+	 * 
+	 * The callback function should take one argument - an associative array of arguments -
+	 * and return a modified array or arguments. See the WP documentation on wp_remote_get()
+	 * for details on what arguments are available and how they work. 
+	 * 
+	 * @uses add_filter() This method is a convenience wrapper for add_filter().
+	 * 
+	 * @param callable $callback
+	 * @return void
+	 */
+	public function addHttpRequestArgFilter($callback){
+		add_filter('puc_request_info_options-'.$this->slug, $callback);
+	}
+	
+	/**
+	 * Register a callback for filtering the plugin info retrieved from the external API.
+	 * 
+	 * The callback function should take two arguments. If the plugin info was retrieved 
+	 * successfully, the first argument passed will be an instance of  PluginInfo. Otherwise, 
+	 * it will be NULL. The second argument will be the corresponding return value of 
+	 * wp_remote_get (see WP docs for details).
+	 *  
+	 * The callback function should return a new or modified instance of PluginInfo or NULL.
+	 * 
+	 * @uses add_filter() This method is a convenience wrapper for add_filter().
+	 * 
+	 * @param callable $callback
+	 * @return void
+	 */
+	public function addResultFilter($callback){
+		add_filter('puc_request_info_result-'.$this->slug, $callback, 10, 2);
+	}
+
+	/**
+	 * Register a callback for one of the update checker filters.
+	 *
+	 * Identical to add_filter(), except it automatically adds the "puc_" prefix
+	 * and the "-$plugin_slug" suffix to the filter name. For example, "request_info_result"
+	 * becomes "puc_request_info_result-your_plugin_slug".
+	 *
+	 * @param string $tag
+	 * @param callable $callback
+	 * @param int $priority
+	 * @param int $acceptedArgs
+	 */
+	public function addFilter($tag, $callback, $priority = 10, $acceptedArgs = 1) {
+		add_filter('puc_' . $tag . '-' . $this->slug, $callback, $priority, $acceptedArgs);
+	}
+
+	/**
+	 * Initialize the update checker Debug Bar plugin/add-on thingy.
+	 */
+	public function initDebugBarPanel() {
+		if ( class_exists('Debug_Bar', false) ) {
+			require_once dirname(__FILE__) . '/debug-bar-plugin.php';
+			$this->debugBarPlugin = new PucDebugBarPlugin($this);
+		}
+	}
+}
+
+endif;
+
+if ( !class_exists('PluginInfo_2_1', false) ):
+
+/**
+ * A container class for holding and transforming various plugin metadata.
+ * 
+ * @author Janis Elsts
+ * @copyright 2015
+ * @version 2.1
+ * @access public
+ */
+class PluginInfo_2_1 {
+	//Most fields map directly to the contents of the plugin's info.json file.
+	//See the relevant docs for a description of their meaning.  
+	public $name;
+	public $slug;
+	public $version;
+	public $homepage;
+	public $sections;
+	public $banners;
+	public $download_url;
+
+	public $author;
+	public $author_homepage;
+	
+	public $requires;
+	public $tested;
+	public $upgrade_notice;
+	
+	public $rating;
+	public $num_ratings;
+	public $downloaded;
+	public $active_installs;
+	public $last_updated;
+	
+	public $id = 0; //The native WP.org API returns numeric plugin IDs, but they're not used for anything.
+
+	public $filename; //Plugin filename relative to the plugins directory.
+		
+	/**
+	 * Create a new instance of PluginInfo from JSON-encoded plugin info 
+	 * returned by an external update API.
+	 * 
+	 * @param string $json Valid JSON string representing plugin info.
+	 * @param bool $triggerErrors
+	 * @return PluginInfo|null New instance of PluginInfo, or NULL on error.
+	 */
+	public static function fromJson($json, $triggerErrors = false){
+		/** @var StdClass $apiResponse */
+		$apiResponse = json_decode($json);
+		if ( empty($apiResponse) || !is_object($apiResponse) ){
+			if ( $triggerErrors ) {
+				trigger_error(
+					"Failed to parse plugin metadata. Try validating your .json file with http://jsonlint.com/",
+					E_USER_NOTICE
+				);
+			}
+			return null;
+		}
+		
+		//Very, very basic validation.
+		$valid = isset($apiResponse->name) && !empty($apiResponse->name) && isset($apiResponse->version) && !empty($apiResponse->version);
+		if ( !$valid ){
+			if ( $triggerErrors ) {
+				trigger_error(
+					"The plugin metadata file does not contain the required 'name' and/or 'version' keys.",
+					E_USER_NOTICE
+				);
+			}
+			return null;
+		}
+		
+		$info = new self();
+		foreach(get_object_vars($apiResponse) as $key => $value){
+			$info->$key = $value;
+		}
+		
+		return $info;		
+	}
+	
+	/**
+	 * Transform plugin info into the format used by the native WordPress.org API
+	 * 
+	 * @return object
+	 */
+	public function toWpFormat(){
+		$info = new StdClass;
+		
+		//The custom update API is built so that many fields have the same name and format
+		//as those returned by the native WordPress.org API. These can be assigned directly. 
+		$sameFormat = array(
+			'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice',
+			'num_ratings', 'downloaded', 'active_installs', 'homepage', 'last_updated',
+		);
+		foreach($sameFormat as $field){
+			if ( isset($this->$field) ) {
+				$info->$field = $this->$field;
+			} else {
+				$info->$field = null;
+			}
+		}
+
+		//Other fields need to be renamed and/or transformed.
+		$info->download_link = $this->download_url;
+		
+		if ( !empty($this->author_homepage) ){
+			$info->author = sprintf('<a href="%s">%s</a>', $this->author_homepage, $this->author);
+		} else {
+			$info->author = $this->author;
+		}
+		
+		if ( is_object($this->sections) ){
+			$info->sections = get_object_vars($this->sections);
+		} elseif ( is_array($this->sections) ) {
+			$info->sections = $this->sections;
+		} else {
+			$info->sections = array('description' => '');
+		}
+
+		if ( !empty($this->banners) ) {
+			//WP expects an array with two keys: "high" and "low". Both are optional.
+			//Docs: https://wordpress.org/plugins/about/faq/#banners
+			$info->banners = is_object($this->banners) ? get_object_vars($this->banners) : $this->banners;
+			$info->banners = array_intersect_key($info->banners, array('high' => true, 'low' => true));
+		}
+
+		return $info;
+	}
+}
+	
+endif;
+
+if ( !class_exists('PluginUpdate_2_1', false) ):
+
+/**
+ * A simple container class for holding information about an available update.
+ * 
+ * @author Janis Elsts
+ * @copyright 2015
+ * @version 2.1
+ * @access public
+ */
+class PluginUpdate_2_1 {
+	public $id = 0;
+	public $slug;
+	public $version;
+	public $homepage;
+	public $download_url;
+	public $upgrade_notice;
+	public $filename; //Plugin filename relative to the plugins directory.
+
+	private static $fields = array('id', 'slug', 'version', 'homepage', 'download_url', 'upgrade_notice', 'filename');
+	
+	/**
+	 * Create a new instance of PluginUpdate from its JSON-encoded representation.
+	 * 
+	 * @param string $json
+	 * @param bool $triggerErrors
+	 * @return PluginUpdate|null
+	 */
+	public static function fromJson($json, $triggerErrors = false){
+		//Since update-related information is simply a subset of the full plugin info,
+		//we can parse the update JSON as if it was a plugin info string, then copy over
+		//the parts that we care about.
+		$pluginInfo = PluginInfo_2_1::fromJson($json, $triggerErrors);
+		if ( $pluginInfo != null ) {
+			return self::fromPluginInfo($pluginInfo);
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Create a new instance of PluginUpdate based on an instance of PluginInfo.
+	 * Basically, this just copies a subset of fields from one object to another.
+	 * 
+	 * @param PluginInfo $info
+	 * @return PluginUpdate
+	 */
+	public static function fromPluginInfo($info){
+		return self::fromObject($info);
+	}
+	
+	/**
+	 * Create a new instance of PluginUpdate by copying the necessary fields from 
+	 * another object.
+	 *  
+	 * @param StdClass|PluginInfo|PluginUpdate $object The source object.
+	 * @return PluginUpdate The new copy.
+	 */
+	public static function fromObject($object) {
+		$update = new self();
+		$fields = self::$fields;
+		if (!empty($object->slug)) $fields = apply_filters('puc_retain_fields-'.$object->slug, $fields);
+		foreach($fields as $field){
+			if (property_exists($object, $field)) {
+				$update->$field = $object->$field;
+			}
+		}
+		return $update;
+	}
+	
+	/**
+	 * Create an instance of StdClass that can later be converted back to 
+	 * a PluginUpdate. Useful for serialization and caching, as it avoids
+	 * the "incomplete object" problem if the cached value is loaded before
+	 * this class.
+	 * 
+	 * @return StdClass
+	 */
+	public function toStdClass() {
+		$object = new StdClass();
+		$fields = self::$fields;
+		if (!empty($this->slug)) $fields = apply_filters('puc_retain_fields-'.$this->slug, $fields);
+		foreach($fields as $field){
+			if (property_exists($this, $field)) {
+				$object->$field = $this->$field;
+			}
+		}
+		return $object;
+	}
+	
+	
+	/**
+	 * Transform the update into the format used by WordPress native plugin API.
+	 * 
+	 * @return object
+	 */
+	public function toWpFormat(){
+		$update = new StdClass;
+
+		$update->id = $this->id;
+		$update->slug = $this->slug;
+		$update->new_version = $this->version;
+		$update->url = $this->homepage;
+		$update->package = $this->download_url;
+		$update->plugin = $this->filename;
+
+		if ( !empty($this->upgrade_notice) ){
+			$update->upgrade_notice = $this->upgrade_notice;
+		}
+		
+		return $update;
+	}
+}
+	
+endif;
+
+if ( !class_exists('PucFactory', false) ):
+
+/**
+ * A factory that builds instances of other classes from this library.
+ *
+ * When multiple versions of the same class have been loaded (e.g. PluginUpdateChecker 1.2
+ * and 1.3), this factory will always use the latest available version. Register class
+ * versions by calling {@link PucFactory::addVersion()}.
+ *
+ * At the moment it can only build instances of the PluginUpdateChecker class. Other classes
+ * are intended mainly for internal use and refer directly to specific implementations. If you
+ * want to instantiate one of them anyway, you can use {@link PucFactory::getLatestClassVersion()}
+ * to get the class name and then create it with <code>new $class(...)</code>.
+ */
+class PucFactory {
+	protected static $classVersions = array();
+	protected static $sorted = false;
+
+	/**
+	 * Create a new instance of PluginUpdateChecker.
+	 *
+	 * @see PluginUpdateChecker::__construct()
+	 *
+	 * @param $metadataUrl
+	 * @param $pluginFile
+	 * @param string $slug
+	 * @param int $checkPeriod
+	 * @param string $optionName
+	 * @param string $muPluginFile
+	 * @return PluginUpdateChecker
+	 */
+	public static function buildUpdateChecker($metadataUrl, $pluginFile, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '') {
+		$class = self::getLatestClassVersion('PluginUpdateChecker');
+		return new $class($metadataUrl, $pluginFile, $slug, $checkPeriod, $optionName, $muPluginFile);
+	}
+
+	/**
+	 * Get the specific class name for the latest available version of a class.
+	 *
+	 * @param string $class
+	 * @return string|null
+	 */
+	public static function getLatestClassVersion($class) {
+		if ( !self::$sorted ) {
+			self::sortVersions();
+		}
+
+		if ( isset(self::$classVersions[$class]) ) {
+			return reset(self::$classVersions[$class]);
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Sort available class versions in descending order (i.e. newest first).
+	 */
+	protected static function sortVersions() {
+		foreach ( self::$classVersions as $class => $versions ) {
+			uksort($versions, array(__CLASS__, 'compareVersions'));
+			self::$classVersions[$class] = $versions;
+		}
+		self::$sorted = true;
+	}
+
+	protected static function compareVersions($a, $b) {
+		return -version_compare($a, $b);
+	}
+
+	/**
+	 * Register a version of a class.
+	 *
+	 * @access private This method is only for internal use by the library.
+	 *
+	 * @param string $generalClass Class name without version numbers, e.g. 'PluginUpdateChecker'.
+	 * @param string $versionedClass Actual class name, e.g. 'PluginUpdateChecker_1_2'.
+	 * @param string $version Version number, e.g. '1.2'.
+	 */
+	public static function addVersion($generalClass, $versionedClass, $version) {
+		if ( !isset(self::$classVersions[$generalClass]) ) {
+			self::$classVersions[$generalClass] = array();
+		}
+		self::$classVersions[$generalClass][$version] = $versionedClass;
+		self::$sorted = false;
+	}
+}
+
+endif;
+
+require_once(dirname(__FILE__) . '/github-checker.php');
+
+//Register classes defined in this file with the factory.
+PucFactory::addVersion('PluginUpdateChecker', 'PluginUpdateChecker_2_1', '2.1');
+PucFactory::addVersion('PluginUpdate', 'PluginUpdate_2_1', '2.1');
+PucFactory::addVersion('PluginInfo', 'PluginInfo_2_1', '2.1');
+PucFactory::addVersion('PucGitHubChecker', 'PucGitHubChecker_2_1', '2.1');
+
+/**
+ * Create non-versioned variants of the update checker classes. This allows for backwards
+ * compatibility with versions that did not use a factory, and it simplifies doc-comments.
+ */
+if ( !class_exists('PluginUpdateChecker', false) ) {
+	class PluginUpdateChecker extends PluginUpdateChecker_2_1 { }
+}
+
+if ( !class_exists('PluginUpdate', false) ) {
+	class PluginUpdate extends PluginUpdate_2_1 {}
+}
+
+if ( !class_exists('PluginInfo', false) ) {
+	class PluginInfo extends PluginInfo_2_1 {}
+}
diff --git a/plugin-update-checker/vendor/Parsedown.php b/plugin-update-checker/vendor/Parsedown.php
new file mode 100644
index 0000000..71a033e
--- /dev/null
+++ b/plugin-update-checker/vendor/Parsedown.php
@@ -0,0 +1,1535 @@
+<?php
+
+#
+#
+# Parsedown
+# http://parsedown.org
+#
+# (c) Emanuil Rusev
+# http://erusev.com
+#
+# For the full license information, view the LICENSE file that was distributed
+# with this source code.
+#
+#
+
+class Parsedown
+{
+    # ~
+
+    const version = '1.5.0';
+
+    # ~
+
+    function text($text)
+    {
+        # make sure no definitions are set
+        $this->DefinitionData = array();
+
+        # standardize line breaks
+        $text = str_replace(array("\r\n", "\r"), "\n", $text);
+
+        # remove surrounding line breaks
+        $text = trim($text, "\n");
+
+        # split text into lines
+        $lines = explode("\n", $text);
+
+        # iterate through lines to identify blocks
+        $markup = $this->lines($lines);
+
+        # trim line breaks
+        $markup = trim($markup, "\n");
+
+        return $markup;
+    }
+
+    #
+    # Setters
+    #
+
+    function setBreaksEnabled($breaksEnabled)
+    {
+        $this->breaksEnabled = $breaksEnabled;
+
+        return $this;
+    }
+
+    protected $breaksEnabled;
+
+    function setMarkupEscaped($markupEscaped)
+    {
+        $this->markupEscaped = $markupEscaped;
+
+        return $this;
+    }
+
+    protected $markupEscaped;
+
+    function setUrlsLinked($urlsLinked)
+    {
+        $this->urlsLinked = $urlsLinked;
+
+        return $this;
+    }
+
+    protected $urlsLinked = true;
+
+    #
+    # Lines
+    #
+
+    protected $BlockTypes = array(
+        '#' => array('Header'),
+        '*' => array('Rule', 'List'),
+        '+' => array('List'),
+        '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
+        '0' => array('List'),
+        '1' => array('List'),
+        '2' => array('List'),
+        '3' => array('List'),
+        '4' => array('List'),
+        '5' => array('List'),
+        '6' => array('List'),
+        '7' => array('List'),
+        '8' => array('List'),
+        '9' => array('List'),
+        ':' => array('Table'),
+        '<' => array('Comment', 'Markup'),
+        '=' => array('SetextHeader'),
+        '>' => array('Quote'),
+        '[' => array('Reference'),
+        '_' => array('Rule'),
+        '`' => array('FencedCode'),
+        '|' => array('Table'),
+        '~' => array('FencedCode'),
+    );
+
+    # ~
+
+    protected $DefinitionTypes = array(
+        '[' => array('Reference'),
+    );
+
+    # ~
+
+    protected $unmarkedBlockTypes = array(
+        'Code',
+    );
+
+    #
+    # Blocks
+    #
+
+    private function lines(array $lines)
+    {
+        $CurrentBlock = null;
+
+        foreach ($lines as $line)
+        {
+            if (chop($line) === '')
+            {
+                if (isset($CurrentBlock))
+                {
+                    $CurrentBlock['interrupted'] = true;
+                }
+
+                continue;
+            }
+
+            if (strpos($line, "\t") !== false)
+            {
+                $parts = explode("\t", $line);
+
+                $line = $parts[0];
+
+                unset($parts[0]);
+
+                foreach ($parts as $part)
+                {
+                    $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
+
+                    $line .= str_repeat(' ', $shortage);
+                    $line .= $part;
+                }
+            }
+
+            $indent = 0;
+
+            while (isset($line[$indent]) and $line[$indent] === ' ')
+            {
+                $indent ++;
+            }
+
+            $text = $indent > 0 ? substr($line, $indent) : $line;
+
+            # ~
+
+            $Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
+
+            # ~
+
+            if (isset($CurrentBlock['incomplete']))
+            {
+                $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
+
+                if (isset($Block))
+                {
+                    $CurrentBlock = $Block;
+
+                    continue;
+                }
+                else
+                {
+                    if (method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
+                    {
+                        $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
+                    }
+
+                    unset($CurrentBlock['incomplete']);
+                }
+            }
+
+            # ~
+
+            $marker = $text[0];
+
+            # ~
+
+            $blockTypes = $this->unmarkedBlockTypes;
+
+            if (isset($this->BlockTypes[$marker]))
+            {
+                foreach ($this->BlockTypes[$marker] as $blockType)
+                {
+                    $blockTypes []= $blockType;
+                }
+            }
+
+            #
+            # ~
+
+            foreach ($blockTypes as $blockType)
+            {
+                $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
+
+                if (isset($Block))
+                {
+                    $Block['type'] = $blockType;
+
+                    if ( ! isset($Block['identified']))
+                    {
+                        $Blocks []= $CurrentBlock;
+
+                        $Block['identified'] = true;
+                    }
+
+                    if (method_exists($this, 'block'.$blockType.'Continue'))
+                    {
+                        $Block['incomplete'] = true;
+                    }
+
+                    $CurrentBlock = $Block;
+
+                    continue 2;
+                }
+            }
+
+            # ~
+
+            if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
+            {
+                $CurrentBlock['element']['text'] .= "\n".$text;
+            }
+            else
+            {
+                $Blocks []= $CurrentBlock;
+
+                $CurrentBlock = $this->paragraph($Line);
+
+                $CurrentBlock['identified'] = true;
+            }
+        }
+
+        # ~
+
+        if (isset($CurrentBlock['incomplete']) and method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
+        {
+            $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
+        }
+
+        # ~
+
+        $Blocks []= $CurrentBlock;
+
+        unset($Blocks[0]);
+
+        # ~
+
+        $markup = '';
+
+        foreach ($Blocks as $Block)
+        {
+            if (isset($Block['hidden']))
+            {
+                continue;
+            }
+
+            $markup .= "\n";
+            $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
+        }
+
+        $markup .= "\n";
+
+        # ~
+
+        return $markup;
+    }
+
+    #
+    # Code
+
+    protected function blockCode($Line, $Block = null)
+    {
+        if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
+        {
+            return;
+        }
+
+        if ($Line['indent'] >= 4)
+        {
+            $text = substr($Line['body'], 4);
+
+            $Block = array(
+                'element' => array(
+                    'name' => 'pre',
+                    'handler' => 'element',
+                    'text' => array(
+                        'name' => 'code',
+                        'text' => $text,
+                    ),
+                ),
+            );
+
+            return $Block;
+        }
+    }
+
+    protected function blockCodeContinue($Line, $Block)
+    {
+        if ($Line['indent'] >= 4)
+        {
+            if (isset($Block['interrupted']))
+            {
+                $Block['element']['text']['text'] .= "\n";
+
+                unset($Block['interrupted']);
+            }
+
+            $Block['element']['text']['text'] .= "\n";
+
+            $text = substr($Line['body'], 4);
+
+            $Block['element']['text']['text'] .= $text;
+
+            return $Block;
+        }
+    }
+
+    protected function blockCodeComplete($Block)
+    {
+        $text = $Block['element']['text']['text'];
+
+        $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
+
+        $Block['element']['text']['text'] = $text;
+
+        return $Block;
+    }
+
+    #
+    # Comment
+
+    protected function blockComment($Line)
+    {
+        if ($this->markupEscaped)
+        {
+            return;
+        }
+
+        if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
+        {
+            $Block = array(
+                'markup' => $Line['body'],
+            );
+
+            if (preg_match('/-->$/', $Line['text']))
+            {
+                $Block['closed'] = true;
+            }
+
+            return $Block;
+        }
+    }
+
+    protected function blockCommentContinue($Line, array $Block)
+    {
+        if (isset($Block['closed']))
+        {
+            return;
+        }
+
+        $Block['markup'] .= "\n" . $Line['body'];
+
+        if (preg_match('/-->$/', $Line['text']))
+        {
+            $Block['closed'] = true;
+        }
+
+        return $Block;
+    }
+
+    #
+    # Fenced Code
+
+    protected function blockFencedCode($Line)
+    {
+        if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
+        {
+            $Element = array(
+                'name' => 'code',
+                'text' => '',
+            );
+
+            if (isset($matches[2]))
+            {
+                $class = 'language-'.$matches[2];
+
+                $Element['attributes'] = array(
+                    'class' => $class,
+                );
+            }
+
+            $Block = array(
+                'char' => $Line['text'][0],
+                'element' => array(
+                    'name' => 'pre',
+                    'handler' => 'element',
+                    'text' => $Element,
+                ),
+            );
+
+            return $Block;
+        }
+    }
+
+    protected function blockFencedCodeContinue($Line, $Block)
+    {
+        if (isset($Block['complete']))
+        {
+            return;
+        }
+
+        if (isset($Block['interrupted']))
+        {
+            $Block['element']['text']['text'] .= "\n";
+
+            unset($Block['interrupted']);
+        }
+
+        if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
+        {
+            $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
+
+            $Block['complete'] = true;
+
+            return $Block;
+        }
+
+        $Block['element']['text']['text'] .= "\n".$Line['body'];;
+
+        return $Block;
+    }
+
+    protected function blockFencedCodeComplete($Block)
+    {
+        $text = $Block['element']['text']['text'];
+
+        $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
+
+        $Block['element']['text']['text'] = $text;
+
+        return $Block;
+    }
+
+    #
+    # Header
+
+    protected function blockHeader($Line)
+    {
+        if (isset($Line['text'][1]))
+        {
+            $level = 1;
+
+            while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
+            {
+                $level ++;
+            }
+
+            if ($level > 6)
+            {
+                return;
+            }
+
+            $text = trim($Line['text'], '# ');
+
+            $Block = array(
+                'element' => array(
+                    'name' => 'h' . min(6, $level),
+                    'text' => $text,
+                    'handler' => 'line',
+                ),
+            );
+
+            return $Block;
+        }
+    }
+
+    #
+    # List
+
+    protected function blockList($Line)
+    {
+        list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
+
+        if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
+        {
+            $Block = array(
+                'indent' => $Line['indent'],
+                'pattern' => $pattern,
+                'element' => array(
+                    'name' => $name,
+                    'handler' => 'elements',
+                ),
+            );
+
+            $Block['li'] = array(
+                'name' => 'li',
+                'handler' => 'li',
+                'text' => array(
+                    $matches[2],
+                ),
+            );
+
+            $Block['element']['text'] []= & $Block['li'];
+
+            return $Block;
+        }
+    }
+
+    protected function blockListContinue($Line, array $Block)
+    {
+        if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
+        {
+            if (isset($Block['interrupted']))
+            {
+                $Block['li']['text'] []= '';
+
+                unset($Block['interrupted']);
+            }
+
+            unset($Block['li']);
+
+            $text = isset($matches[1]) ? $matches[1] : '';
+
+            $Block['li'] = array(
+                'name' => 'li',
+                'handler' => 'li',
+                'text' => array(
+                    $text,
+                ),
+            );
+
+            $Block['element']['text'] []= & $Block['li'];
+
+            return $Block;
+        }
+
+        if ($Line['text'][0] === '[' and $this->blockReference($Line))
+        {
+            return $Block;
+        }
+
+        if ( ! isset($Block['interrupted']))
+        {
+            $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
+
+            $Block['li']['text'] []= $text;
+
+            return $Block;
+        }
+
+        if ($Line['indent'] > 0)
+        {
+            $Block['li']['text'] []= '';
+
+            $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
+
+            $Block['li']['text'] []= $text;
+
+            unset($Block['interrupted']);
+
+            return $Block;
+        }
+    }
+
+    #
+    # Quote
+
+    protected function blockQuote($Line)
+    {
+        if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
+        {
+            $Block = array(
+                'element' => array(
+                    'name' => 'blockquote',
+                    'handler' => 'lines',
+                    'text' => (array) $matches[1],
+                ),
+            );
+
+            return $Block;
+        }
+    }
+
+    protected function blockQuoteContinue($Line, array $Block)
+    {
+        if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
+        {
+            if (isset($Block['interrupted']))
+            {
+                $Block['element']['text'] []= '';
+
+                unset($Block['interrupted']);
+            }
+
+            $Block['element']['text'] []= $matches[1];
+
+            return $Block;
+        }
+
+        if ( ! isset($Block['interrupted']))
+        {
+            $Block['element']['text'] []= $Line['text'];
+
+            return $Block;
+        }
+    }
+
+    #
+    # Rule
+
+    protected function blockRule($Line)
+    {
+        if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
+        {
+            $Block = array(
+                'element' => array(
+                    'name' => 'hr'
+                ),
+            );
+
+            return $Block;
+        }
+    }
+
+    #
+    # Setext
+
+    protected function blockSetextHeader($Line, array $Block = null)
+    {
+        if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
+        {
+            return;
+        }
+
+        if (chop($Line['text'], $Line['text'][0]) === '')
+        {
+            $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
+
+            return $Block;
+        }
+    }
+
+    #
+    # Markup
+
+    protected function blockMarkup($Line)
+    {
+        if ($this->markupEscaped)
+        {
+            return;
+        }
+
+        if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
+        {
+            if (in_array($matches[1], $this->textLevelElements))
+            {
+                return;
+            }
+
+            $Block = array(
+                'name' => $matches[1],
+                'depth' => 0,
+                'markup' => $Line['text'],
+            );
+
+            $length = strlen($matches[0]);
+
+            $remainder = substr($Line['text'], $length);
+
+            if (trim($remainder) === '')
+            {
+                if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
+                {
+                    $Block['closed'] = true;
+
+                    $Block['void'] = true;
+                }
+            }
+            else
+            {
+                if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
+                {
+                    return;
+                }
+
+                if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
+                {
+                    $Block['closed'] = true;
+                }
+            }
+
+            return $Block;
+        }
+    }
+
+    protected function blockMarkupContinue($Line, array $Block)
+    {
+        if (isset($Block['closed']))
+        {
+            return;
+        }
+
+        if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
+        {
+            $Block['depth'] ++;
+        }
+
+        if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
+        {
+            if ($Block['depth'] > 0)
+            {
+                $Block['depth'] --;
+            }
+            else
+            {
+                $Block['closed'] = true;
+            }
+
+            $Block['markup'] .= $matches[1];
+        }
+
+        if (isset($Block['interrupted']))
+        {
+            $Block['markup'] .= "\n";
+
+            unset($Block['interrupted']);
+        }
+
+        $Block['markup'] .= "\n".$Line['body'];
+
+        return $Block;
+    }
+
+    #
+    # Reference
+
+    protected function blockReference($Line)
+    {
+        if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
+        {
+            $id = strtolower($matches[1]);
+
+            $Data = array(
+                'url' => $matches[2],
+                'title' => null,
+            );
+
+            if (isset($matches[3]))
+            {
+                $Data['title'] = $matches[3];
+            }
+
+            $this->DefinitionData['Reference'][$id] = $Data;
+
+            $Block = array(
+                'hidden' => true,
+            );
+
+            return $Block;
+        }
+    }
+
+    #
+    # Table
+
+    protected function blockTable($Line, array $Block = null)
+    {
+        if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
+        {
+            return;
+        }
+
+        if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
+        {
+            $alignments = array();
+
+            $divider = $Line['text'];
+
+            $divider = trim($divider);
+            $divider = trim($divider, '|');
+
+            $dividerCells = explode('|', $divider);
+
+            foreach ($dividerCells as $dividerCell)
+            {
+                $dividerCell = trim($dividerCell);
+
+                if ($dividerCell === '')
+                {
+                    continue;
+                }
+
+                $alignment = null;
+
+                if ($dividerCell[0] === ':')
+                {
+                    $alignment = 'left';
+                }
+
+                if (substr($dividerCell, - 1) === ':')
+                {
+                    $alignment = $alignment === 'left' ? 'center' : 'right';
+                }
+
+                $alignments []= $alignment;
+            }
+
+            # ~
+
+            $HeaderElements = array();
+
+            $header = $Block['element']['text'];
+
+            $header = trim($header);
+            $header = trim($header, '|');
+
+            $headerCells = explode('|', $header);
+
+            foreach ($headerCells as $index => $headerCell)
+            {
+                $headerCell = trim($headerCell);
+
+                $HeaderElement = array(
+                    'name' => 'th',
+                    'text' => $headerCell,
+                    'handler' => 'line',
+                );
+
+                if (isset($alignments[$index]))
+                {
+                    $alignment = $alignments[$index];
+
+                    $HeaderElement['attributes'] = array(
+                        'style' => 'text-align: '.$alignment.';',
+                    );
+                }
+
+                $HeaderElements []= $HeaderElement;
+            }
+
+            # ~
+
+            $Block = array(
+                'alignments' => $alignments,
+                'identified' => true,
+                'element' => array(
+                    'name' => 'table',
+                    'handler' => 'elements',
+                ),
+            );
+
+            $Block['element']['text'] []= array(
+                'name' => 'thead',
+                'handler' => 'elements',
+            );
+
+            $Block['element']['text'] []= array(
+                'name' => 'tbody',
+                'handler' => 'elements',
+                'text' => array(),
+            );
+
+            $Block['element']['text'][0]['text'] []= array(
+                'name' => 'tr',
+                'handler' => 'elements',
+                'text' => $HeaderElements,
+            );
+
+            return $Block;
+        }
+    }
+
+    protected function blockTableContinue($Line, array $Block)
+    {
+        if (isset($Block['interrupted']))
+        {
+            return;
+        }
+
+        if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
+        {
+            $Elements = array();
+
+            $row = $Line['text'];
+
+            $row = trim($row);
+            $row = trim($row, '|');
+
+            preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
+
+            foreach ($matches[0] as $index => $cell)
+            {
+                $cell = trim($cell);
+
+                $Element = array(
+                    'name' => 'td',
+                    'handler' => 'line',
+                    'text' => $cell,
+                );
+
+                if (isset($Block['alignments'][$index]))
+                {
+                    $Element['attributes'] = array(
+                        'style' => 'text-align: '.$Block['alignments'][$index].';',
+                    );
+                }
+
+                $Elements []= $Element;
+            }
+
+            $Element = array(
+                'name' => 'tr',
+                'handler' => 'elements',
+                'text' => $Elements,
+            );
+
+            $Block['element']['text'][1]['text'] []= $Element;
+
+            return $Block;
+        }
+    }
+
+    #
+    # ~
+    #
+
+    protected function paragraph($Line)
+    {
+        $Block = array(
+            'element' => array(
+                'name' => 'p',
+                'text' => $Line['text'],
+                'handler' => 'line',
+            ),
+        );
+
+        return $Block;
+    }
+
+    #
+    # Inline Elements
+    #
+
+    protected $InlineTypes = array(
+        '"' => array('SpecialCharacter'),
+        '!' => array('Image'),
+        '&' => array('SpecialCharacter'),
+        '*' => array('Emphasis'),
+        ':' => array('Url'),
+        '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
+        '>' => array('SpecialCharacter'),
+        '[' => array('Link'),
+        '_' => array('Emphasis'),
+        '`' => array('Code'),
+        '~' => array('Strikethrough'),
+        '\\' => array('EscapeSequence'),
+    );
+
+    # ~
+
+    protected $inlineMarkerList = '!"*_&[:<>`~\\';
+
+    #
+    # ~
+    #
+
+    public function line($text)
+    {
+        $markup = '';
+
+        $unexaminedText = $text;
+
+        $markerPosition = 0;
+
+        while ($excerpt = strpbrk($unexaminedText, $this->inlineMarkerList))
+        {
+            $marker = $excerpt[0];
+
+            $markerPosition += strpos($unexaminedText, $marker);
+
+            $Excerpt = array('text' => $excerpt, 'context' => $text);
+
+            foreach ($this->InlineTypes[$marker] as $inlineType)
+            {
+                $Inline = $this->{'inline'.$inlineType}($Excerpt);
+
+                if ( ! isset($Inline))
+                {
+                    continue;
+                }
+
+                if (isset($Inline['position']) and $Inline['position'] > $markerPosition) # position is ahead of marker
+                {
+                    continue;
+                }
+
+                if ( ! isset($Inline['position']))
+                {
+                    $Inline['position'] = $markerPosition;
+                }
+
+                $unmarkedText = substr($text, 0, $Inline['position']);
+
+                $markup .= $this->unmarkedText($unmarkedText);
+
+                $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
+
+                $text = substr($text, $Inline['position'] + $Inline['extent']);
+
+                $unexaminedText = $text;
+
+                $markerPosition = 0;
+
+                continue 2;
+            }
+
+            $unexaminedText = substr($excerpt, 1);
+
+            $markerPosition ++;
+        }
+
+        $markup .= $this->unmarkedText($text);
+
+        return $markup;
+    }
+
+    #
+    # ~
+    #
+
+    protected function inlineCode($Excerpt)
+    {
+        $marker = $Excerpt['text'][0];
+
+        if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches))
+        {
+            $text = $matches[2];
+            $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
+            $text = preg_replace("/[ ]*\n/", ' ', $text);
+
+            return array(
+                'extent' => strlen($matches[0]),
+                'element' => array(
+                    'name' => 'code',
+                    'text' => $text,
+                ),
+            );
+        }
+    }
+
+    protected function inlineEmailTag($Excerpt)
+    {
+        if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
+        {
+            $url = $matches[1];
+
+            if ( ! isset($matches[2]))
+            {
+                $url = 'mailto:' . $url;
+            }
+
+            return array(
+                'extent' => strlen($matches[0]),
+                'element' => array(
+                    'name' => 'a',
+                    'text' => $matches[1],
+                    'attributes' => array(
+                        'href' => $url,
+                    ),
+                ),
+            );
+        }
+    }
+
+    protected function inlineEmphasis($Excerpt)
+    {
+        if ( ! isset($Excerpt['text'][1]))
+        {
+            return;
+        }
+
+        $marker = $Excerpt['text'][0];
+
+        if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
+        {
+            $emphasis = 'strong';
+        }
+        elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
+        {
+            $emphasis = 'em';
+        }
+        else
+        {
+            return;
+        }
+
+        return array(
+            'extent' => strlen($matches[0]),
+            'element' => array(
+                'name' => $emphasis,
+                'handler' => 'line',
+                'text' => $matches[1],
+            ),
+        );
+    }
+
+    protected function inlineEscapeSequence($Excerpt)
+    {
+        if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
+        {
+            return array(
+                'markup' => $Excerpt['text'][1],
+                'extent' => 2,
+            );
+        }
+    }
+
+    protected function inlineImage($Excerpt)
+    {
+        if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
+        {
+            return;
+        }
+
+        $Excerpt['text']= substr($Excerpt['text'], 1);
+
+        $Link = $this->inlineLink($Excerpt);
+
+        if ($Link === null)
+        {
+            return;
+        }
+
+        $Inline = array(
+            'extent' => $Link['extent'] + 1,
+            'element' => array(
+                'name' => 'img',
+                'attributes' => array(
+                    'src' => $Link['element']['attributes']['href'],
+                    'alt' => $Link['element']['text'],
+                ),
+            ),
+        );
+
+        $Inline['element']['attributes'] += $Link['element']['attributes'];
+
+        unset($Inline['element']['attributes']['href']);
+
+        return $Inline;
+    }
+
+    protected function inlineLink($Excerpt)
+    {
+        $Element = array(
+            'name' => 'a',
+            'handler' => 'line',
+            'text' => null,
+            'attributes' => array(
+                'href' => null,
+                'title' => null,
+            ),
+        );
+
+        $extent = 0;
+
+        $remainder = $Excerpt['text'];
+
+        if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
+        {
+            $Element['text'] = $matches[1];
+
+            $extent += strlen($matches[0]);
+
+            $remainder = substr($remainder, $extent);
+        }
+        else
+        {
+            return;
+        }
+
+        if (preg_match('/^[(]((?:[^ (]|[(][^ )]+[)])+)(?:[ ]+("[^"]+"|\'[^\']+\'))?[)]/', $remainder, $matches))
+        {
+            $Element['attributes']['href'] = $matches[1];
+
+            if (isset($matches[2]))
+            {
+                $Element['attributes']['title'] = substr($matches[2], 1, - 1);
+            }
+
+            $extent += strlen($matches[0]);
+        }
+        else
+        {
+            if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
+            {
+                $definition = $matches[1] ? $matches[1] : $Element['text'];
+                $definition = strtolower($definition);
+
+                $extent += strlen($matches[0]);
+            }
+            else
+            {
+                $definition = strtolower($Element['text']);
+            }
+
+            if ( ! isset($this->DefinitionData['Reference'][$definition]))
+            {
+                return;
+            }
+
+            $Definition = $this->DefinitionData['Reference'][$definition];
+
+            $Element['attributes']['href'] = $Definition['url'];
+            $Element['attributes']['title'] = $Definition['title'];
+        }
+
+        $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);
+
+        return array(
+            'extent' => $extent,
+            'element' => $Element,
+        );
+    }
+
+    protected function inlineMarkup($Excerpt)
+    {
+        if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
+        {
+            return;
+        }
+
+        if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
+        {
+            return array(
+                'markup' => $matches[0],
+                'extent' => strlen($matches[0]),
+            );
+        }
+
+        if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches))
+        {
+            return array(
+                'markup' => $matches[0],
+                'extent' => strlen($matches[0]),
+            );
+        }
+
+        if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
+        {
+            return array(
+                'markup' => $matches[0],
+                'extent' => strlen($matches[0]),
+            );
+        }
+    }
+
+    protected function inlineSpecialCharacter($Excerpt)
+    {
+        if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text']))
+        {
+            return array(
+                'markup' => '&amp;',
+                'extent' => 1,
+            );
+        }
+
+        $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
+
+        if (isset($SpecialCharacter[$Excerpt['text'][0]]))
+        {
+            return array(
+                'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
+                'extent' => 1,
+            );
+        }
+    }
+
+    protected function inlineStrikethrough($Excerpt)
+    {
+        if ( ! isset($Excerpt['text'][1]))
+        {
+            return;
+        }
+
+        if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
+        {
+            return array(
+                'extent' => strlen($matches[0]),
+                'element' => array(
+                    'name' => 'del',
+                    'text' => $matches[1],
+                    'handler' => 'line',
+                ),
+            );
+        }
+    }
+
+    protected function inlineUrl($Excerpt)
+    {
+        if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
+        {
+            return;
+        }
+
+        if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
+        {
+            $Inline = array(
+                'extent' => strlen($matches[0][0]),
+                'position' => $matches[0][1],
+                'element' => array(
+                    'name' => 'a',
+                    'text' => $matches[0][0],
+                    'attributes' => array(
+                        'href' => $matches[0][0],
+                    ),
+                ),
+            );
+
+            return $Inline;
+        }
+    }
+
+    protected function inlineUrlTag($Excerpt)
+    {
+        if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
+        {
+            $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[1]);
+
+            return array(
+                'extent' => strlen($matches[0]),
+                'element' => array(
+                    'name' => 'a',
+                    'text' => $url,
+                    'attributes' => array(
+                        'href' => $url,
+                    ),
+                ),
+            );
+        }
+    }
+
+    #
+    # ~
+
+    protected $unmarkedInlineTypes = array("\n" => 'Break', '://' => 'Url');
+
+    # ~
+
+    protected function unmarkedText($text)
+    {
+        if ($this->breaksEnabled)
+        {
+            $text = preg_replace('/[ ]*\n/', "<br />\n", $text);
+        }
+        else
+        {
+            $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "<br />\n", $text);
+            $text = str_replace(" \n", "\n", $text);
+        }
+
+        return $text;
+    }
+
+    #
+    # Handlers
+    #
+
+    protected function element(array $Element)
+    {
+        $markup = '<'.$Element['name'];
+
+        if (isset($Element['attributes']))
+        {
+            foreach ($Element['attributes'] as $name => $value)
+            {
+                if ($value === null)
+                {
+                    continue;
+                }
+
+                $markup .= ' '.$name.'="'.$value.'"';
+            }
+        }
+
+        if (isset($Element['text']))
+        {
+            $markup .= '>';
+
+            if (isset($Element['handler']))
+            {
+                $markup .= $this->$Element['handler']($Element['text']);
+            }
+            else
+            {
+                $markup .= $Element['text'];
+            }
+
+            $markup .= '</'.$Element['name'].'>';
+        }
+        else
+        {
+            $markup .= ' />';
+        }
+
+        return $markup;
+    }
+
+    protected function elements(array $Elements)
+    {
+        $markup = '';
+
+        foreach ($Elements as $Element)
+        {
+            $markup .= "\n" . $this->element($Element);
+        }
+
+        $markup .= "\n";
+
+        return $markup;
+    }
+
+    # ~
+
+    protected function li($lines)
+    {
+        $markup = $this->lines($lines);
+
+        $trimmedMarkup = trim($markup);
+
+        if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '<p>')
+        {
+            $markup = $trimmedMarkup;
+            $markup = substr($markup, 3);
+
+            $position = strpos($markup, "</p>");
+
+            $markup = substr_replace($markup, '', $position, 4);
+        }
+
+        return $markup;
+    }
+
+    #
+    # Deprecated Methods
+    #
+
+    function parse($text)
+    {
+        $markup = $this->text($text);
+
+        return $markup;
+    }
+
+    #
+    # Static Methods
+    #
+
+    static function instance($name = 'default')
+    {
+        if (isset(self::$instances[$name]))
+        {
+            return self::$instances[$name];
+        }
+
+        $instance = new self();
+
+        self::$instances[$name] = $instance;
+
+        return $instance;
+    }
+
+    private static $instances = array();
+
+    #
+    # Fields
+    #
+
+    protected $DefinitionData;
+
+    #
+    # Read-Only
+
+    protected $specialCharacters = array(
+        '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|',
+    );
+
+    protected $StrongRegex = array(
+        '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
+        '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
+    );
+
+    protected $EmRegex = array(
+        '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
+        '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us',
+    );
+
+    protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?';
+
+    protected $voidElements = array(
+        'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source',
+    );
+
+    protected $textLevelElements = array(
+        'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont',
+        'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
+        'i', 'rp', 'del', 'code',          'strike', 'marquee',
+        'q', 'rt', 'ins', 'font',          'strong',
+        's', 'tt', 'sub', 'mark',
+        'u', 'xm', 'sup', 'nobr',
+                   'var', 'ruby',
+                   'wbr', 'span',
+                          'time',
+    );
+}
diff --git a/plugin-update-checker/vendor/readme-parser.php b/plugin-update-checker/vendor/readme-parser.php
new file mode 100644
index 0000000..5e3c9ce
--- /dev/null
+++ b/plugin-update-checker/vendor/readme-parser.php
@@ -0,0 +1,331 @@
+<?php
+
+/**
+ * This is a slightly modified version of github.com/markjaquith/WordPress-Plugin-Readme-Parser
+ * It uses Parsedown instead of the "Markdown Extra" parser.
+ */
+
+Class PucReadmeParser {
+
+	function __construct() {
+		// This space intentially blank
+	}
+
+	function parse_readme( $file ) {
+		$file_contents = @implode('', @file($file));
+		return $this->parse_readme_contents( $file_contents );
+	}
+
+	function parse_readme_contents( $file_contents ) {
+		$file_contents = str_replace(array("\r\n", "\r"), "\n", $file_contents);
+		$file_contents = trim($file_contents);
+		if ( 0 === strpos( $file_contents, "\xEF\xBB\xBF" ) )
+			$file_contents = substr( $file_contents, 3 );
+
+		// Markdown transformations
+		$file_contents = preg_replace( "|^###([^#]+)#*?\s*?\n|im", '=$1='."\n",     $file_contents );
+		$file_contents = preg_replace( "|^##([^#]+)#*?\s*?\n|im",  '==$1=='."\n",   $file_contents );
+		$file_contents = preg_replace( "|^#([^#]+)#*?\s*?\n|im",   '===$1==='."\n", $file_contents );
+
+		// === Plugin Name ===
+		// Must be the very first thing.
+		if ( !preg_match('|^===(.*)===|', $file_contents, $_name) )
+			return array(); // require a name
+		$name = trim($_name[1], '=');
+		$name = $this->sanitize_text( $name );
+
+		$file_contents = $this->chop_string( $file_contents, $_name[0] );
+
+
+		// Requires at least: 1.5
+		if ( preg_match('|Requires at least:(.*)|i', $file_contents, $_requires_at_least) )
+			$requires_at_least = $this->sanitize_text($_requires_at_least[1]);
+		else
+			$requires_at_least = NULL;
+
+
+		// Tested up to: 2.1
+		if ( preg_match('|Tested up to:(.*)|i', $file_contents, $_tested_up_to) )
+			$tested_up_to = $this->sanitize_text( $_tested_up_to[1] );
+		else
+			$tested_up_to = NULL;
+
+
+		// Stable tag: 10.4-ride-the-fire-eagle-danger-day
+		if ( preg_match('|Stable tag:(.*)|i', $file_contents, $_stable_tag) )
+			$stable_tag = $this->sanitize_text( $_stable_tag[1] );
+		else
+			$stable_tag = NULL; // we assume trunk, but don't set it here to tell the difference between specified trunk and default trunk
+
+
+		// Tags: some tag, another tag, we like tags
+		if ( preg_match('|Tags:(.*)|i', $file_contents, $_tags) ) {
+			$tags = preg_split('|,[\s]*?|', trim($_tags[1]));
+			foreach ( array_keys($tags) as $t )
+				$tags[$t] = $this->sanitize_text( $tags[$t] );
+		} else {
+			$tags = array();
+		}
+
+
+		// Contributors: markjaquith, mdawaffe, zefrank
+		$contributors = array();
+		if ( preg_match('|Contributors:(.*)|i', $file_contents, $_contributors) ) {
+			$temp_contributors = preg_split('|,[\s]*|', trim($_contributors[1]));
+			foreach ( array_keys($temp_contributors) as $c ) {
+				$tmp_sanitized = $this->user_sanitize( $temp_contributors[$c] );
+				if ( strlen(trim($tmp_sanitized)) > 0 )
+					$contributors[$c] = $tmp_sanitized;
+				unset($tmp_sanitized);
+			}
+		}
+
+
+		// Donate Link: URL
+		if ( preg_match('|Donate link:(.*)|i', $file_contents, $_donate_link) )
+			$donate_link = esc_url( $_donate_link[1] );
+		else
+			$donate_link = NULL;
+
+
+		// togs, conts, etc are optional and order shouldn't matter.  So we chop them only after we've grabbed their values.
+		foreach ( array('tags', 'contributors', 'requires_at_least', 'tested_up_to', 'stable_tag', 'donate_link') as $chop ) {
+			if ( $$chop ) {
+				$_chop = '_' . $chop;
+				$file_contents = $this->chop_string( $file_contents, ${$_chop}[0] );
+			}
+		}
+
+		$file_contents = trim($file_contents);
+
+
+		// short-description fu
+		if ( !preg_match('/(^(.*?))^[\s]*=+?[\s]*.+?[\s]*=+?/ms', $file_contents, $_short_description) )
+			$_short_description = array( 1 => &$file_contents, 2 => &$file_contents );
+		$short_desc_filtered = $this->sanitize_text( $_short_description[2] );
+		$short_desc_length = strlen($short_desc_filtered);
+		$short_description = substr($short_desc_filtered, 0, 150);
+		if ( $short_desc_length > strlen($short_description) )
+			$truncated = true;
+		else
+			$truncated = false;
+		if ( $_short_description[1] )
+			$file_contents = $this->chop_string( $file_contents, $_short_description[1] ); // yes, the [1] is intentional
+
+		// == Section ==
+		// Break into sections
+		// $_sections[0] will be the title of the first section, $_sections[1] will be the content of the first section
+		// the array alternates from there:  title2, content2, title3, content3... and so forth
+		$_sections = preg_split('/^[\s]*==[\s]*(.+?)[\s]*==/m', $file_contents, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
+
+		$sections = array();
+		for ( $i=1; $i <= count($_sections); $i +=2 ) {
+			$_sections[$i] = preg_replace('/^[\s]*=[\s]+(.+?)[\s]+=/m', '<h4>$1</h4>', $_sections[$i]);
+			$_sections[$i] = $this->filter_text( $_sections[$i], true );
+			$title = $this->sanitize_text( $_sections[$i-1] );
+			$sections[str_replace(' ', '_', strtolower($title))] = array('title' => $title, 'content' => $_sections[$i]);
+		}
+
+
+		// Special sections
+		// This is where we nab our special sections, so we can enforce their order and treat them differently, if needed
+		// upgrade_notice is not a section, but parse it like it is for now
+		$final_sections = array();
+		foreach ( array('description', 'installation', 'frequently_asked_questions', 'screenshots', 'changelog', 'change_log', 'upgrade_notice') as $special_section ) {
+			if ( isset($sections[$special_section]) ) {
+				$final_sections[$special_section] = $sections[$special_section]['content'];
+				unset($sections[$special_section]);
+			}
+		}
+		if ( isset($final_sections['change_log']) && empty($final_sections['changelog']) )
+			$final_sections['changelog'] = $final_sections['change_log'];
+
+
+		$final_screenshots = array();
+		if ( isset($final_sections['screenshots']) ) {
+			preg_match_all('|<li>(.*?)</li>|s', $final_sections['screenshots'], $screenshots, PREG_SET_ORDER);
+			if ( $screenshots ) {
+				foreach ( (array) $screenshots as $ss )
+					$final_screenshots[] = $ss[1];
+			}
+		}
+
+		// Parse the upgrade_notice section specially:
+		// 1.0 => blah, 1.1 => fnord
+		$upgrade_notice = array();
+		if ( isset($final_sections['upgrade_notice']) ) {
+			$split = preg_split( '#<h4>(.*?)</h4>#', $final_sections['upgrade_notice'], -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
+			for ( $i = 0; $i < count( $split ); $i += 2 )
+				$upgrade_notice[$this->sanitize_text( $split[$i] )] = substr( $this->sanitize_text( $split[$i + 1] ), 0, 300 );
+			unset( $final_sections['upgrade_notice'] );
+		}
+
+		// No description?
+		// No problem... we'll just fall back to the old style of description
+		// We'll even let you use markup this time!
+		$excerpt = false;
+		if ( !isset($final_sections['description']) ) {
+			$final_sections = array_merge(array('description' => $this->filter_text( $_short_description[2], true )), $final_sections);
+			$excerpt = true;
+		}
+
+
+		// dump the non-special sections into $remaining_content
+		// their order will be determined by their original order in the readme.txt
+		$remaining_content = '';
+		foreach ( $sections as $s_name => $s_data ) {
+			$remaining_content .= "\n<h3>{$s_data['title']}</h3>\n{$s_data['content']}";
+		}
+		$remaining_content = trim($remaining_content);
+
+
+		// All done!
+		// $r['tags'] and $r['contributors'] are simple arrays
+		// $r['sections'] is an array with named elements
+		$r = array(
+			'name' => $name,
+			'tags' => $tags,
+			'requires_at_least' => $requires_at_least,
+			'tested_up_to' => $tested_up_to,
+			'stable_tag' => $stable_tag,
+			'contributors' => $contributors,
+			'donate_link' => $donate_link,
+			'short_description' => $short_description,
+			'screenshots' => $final_screenshots,
+			'is_excerpt' => $excerpt,
+			'is_truncated' => $truncated,
+			'sections' => $final_sections,
+			'remaining_content' => $remaining_content,
+			'upgrade_notice' => $upgrade_notice
+		);
+
+		return $r;
+	}
+
+	function chop_string( $string, $chop ) { // chop a "prefix" from a string: Agressive! uses strstr not 0 === strpos
+		if ( $_string = strstr($string, $chop) ) {
+			$_string = substr($_string, strlen($chop));
+			return trim($_string);
+		} else {
+			return trim($string);
+		}
+	}
+
+	function user_sanitize( $text, $strict = false ) { // whitelisted chars
+		if ( function_exists('user_sanitize') ) // bbPress native
+			return user_sanitize( $text, $strict );
+
+		if ( $strict ) {
+			$text = preg_replace('/[^a-z0-9-]/i', '', $text);
+			$text = preg_replace('|-+|', '-', $text);
+		} else {
+			$text = preg_replace('/[^a-z0-9_-]/i', '', $text);
+		}
+		return $text;
+	}
+
+	function sanitize_text( $text ) { // not fancy
+		$text = strip_tags($text);
+		$text = esc_html($text);
+		$text = trim($text);
+		return $text;
+	}
+
+	function filter_text( $text, $markdown = false ) { // fancy, Markdown
+		$text = trim($text);
+
+		$text = call_user_func( array( __CLASS__, 'code_trick' ), $text, $markdown ); // A better parser than Markdown's for: backticks -> CODE
+
+		if ( $markdown ) { // Parse markdown.
+			if ( !class_exists('Parsedown', false) ) {
+				require_once(dirname(__FILE__) . '/Parsedown.php');
+			}
+			$instance = Parsedown::instance();
+			$text = $instance->text($text);
+		}
+
+		$allowed = array(
+			'a' => array(
+				'href' => array(),
+				'title' => array(),
+				'rel' => array()),
+			'blockquote' => array('cite' => array()),
+			'br' => array(),
+			'p' => array(),
+			'code' => array(),
+			'pre' => array(),
+			'em' => array(),
+			'strong' => array(),
+			'ul' => array(),
+			'ol' => array(),
+			'li' => array(),
+			'h3' => array(),
+			'h4' => array()
+		);
+
+		$text = balanceTags($text);
+		
+		$text = wp_kses( $text, $allowed );
+		$text = trim($text);
+		return $text;
+	}
+
+	function code_trick( $text, $markdown ) { // Don't use bbPress native function - it's incompatible with Markdown
+		// If doing markdown, first take any user formatted code blocks and turn them into backticks so that
+		// markdown will preserve things like underscores in code blocks
+		if ( $markdown )
+			$text = preg_replace_callback("!(<pre><code>|<code>)(.*?)(</code></pre>|</code>)!s", array( __CLASS__,'decodeit'), $text);
+
+		$text = str_replace(array("\r\n", "\r"), "\n", $text);
+		if ( !$markdown ) {
+			// This gets the "inline" code blocks, but can't be used with Markdown.
+			$text = preg_replace_callback("|(`)(.*?)`|", array( __CLASS__, 'encodeit'), $text);
+			// This gets the "block level" code blocks and converts them to PRE CODE
+			$text = preg_replace_callback("!(^|\n)`(.*?)`!s", array( __CLASS__, 'encodeit'), $text);
+		} else {
+			// Markdown can do inline code, we convert bbPress style block level code to Markdown style
+			$text = preg_replace_callback("!(^|\n)([ \t]*?)`(.*?)`!s", array( __CLASS__, 'indent'), $text);
+		}
+		return $text;
+	}
+
+	function indent( $matches ) {
+		$text = $matches[3];
+		$text = preg_replace('|^|m', $matches[2] . '    ', $text);
+		return $matches[1] . $text;
+	}
+
+	function encodeit( $matches ) {
+		if ( function_exists('encodeit') ) // bbPress native
+			return encodeit( $matches );
+
+		$text = trim($matches[2]);
+		$text = htmlspecialchars($text, ENT_QUOTES);
+		$text = str_replace(array("\r\n", "\r"), "\n", $text);
+		$text = preg_replace("|\n\n\n+|", "\n\n", $text);
+		$text = str_replace('&amp;lt;', '&lt;', $text);
+		$text = str_replace('&amp;gt;', '&gt;', $text);
+		$text = "<code>$text</code>";
+		if ( "`" != $matches[1] )
+			$text = "<pre>$text</pre>";
+		return $text;
+	}
+
+	function decodeit( $matches ) {
+		if ( function_exists('decodeit') ) // bbPress native
+			return decodeit( $matches );
+
+		$text = $matches[2];
+		$trans_table = array_flip(get_html_translation_table(HTML_ENTITIES));
+		$text = strtr($text, $trans_table);
+		$text = str_replace('<br />', '', $text);
+		$text = str_replace('&#38;', '&', $text);
+		$text = str_replace('&#39;', "'", $text);
+		if ( '<pre><code>' == $matches[1] )
+			$text = "\n$text\n";
+		return "`$text`";
+	}
+
+} // end class
+
+Class Automattic_Readme extends PucReadmeParser {}
diff --git a/releases/opentools-woocommerce-ordernumbers-advanced_v1.2.1.zip b/releases/opentools-woocommerce-ordernumbers-advanced_v1.2.1.zip
new file mode 100644
index 0000000000000000000000000000000000000000..8b6acb1612d0aec56ed5745073d404d35ddca983
GIT binary patch
literal 105970
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
Wz{&<{RO&G3F!YNtF!;8EvKs)7i$2`|

literal 0
HcmV?d00001

diff --git a/woocommerce-advanced-ordernumbers.php b/woocommerce-advanced-ordernumbers.php
index 3587239..9146810 100644
--- a/woocommerce-advanced-ordernumbers.php
+++ b/woocommerce-advanced-ordernumbers.php
@@ -22,7 +22,24 @@ if ( !defined('OPENTOOLS_ADVANCED_ORDERNUMBERS') ) {
 	define ('OPENTOOLS_ADVANCED_ORDERNUMBERS', true);
 }
 
+// *****************************************************************
+// * PLUGIN UPDATES
+// *****************************************************************
+require 'opentools-update-checker.php';
+$myUpdateChecker = new OpenToolsPluginUpdateChecker(
+    'http://www.open-tools.net/UpdateServer/index.php?package=WooCommerce&extension=AdvancedOrdernumbers',
+    __FILE__,
+    'woocommerce-advanced-ordernumbers'
+);
+// $myUpdateChecker->checkForUpdates();
+// *****************************************************************
+
+
 function otaon_is_wc_active() {
+// Makes sure the plugin is defined before trying to use it
+	if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
+		require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
+	}
 	return 
 		in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) 
 		|| 
-- 
GitLab