diff --git a/wp-content/plugins/wp2pgpmail/classes/formulaire.inc.php b/wp-content/plugins/wp2pgpmail/classes/formulaire.inc.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ab8f34ee54073e329f8c20092f77e986afbf742
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/classes/formulaire.inc.php
@@ -0,0 +1,173 @@
+<?php
+
+class Formulaire {
+	function __construct() {
+		$siteurl = site_url();
+		$wp2pgpmail_pgpkey_keyid = get_option('wp2pgpmail_pgpkey_keyid');
+		$wp2pgpmail_pgpkey_pkey = get_option('wp2pgpmail_pgpkey_pkey');
+		$wp2pgpmail_pgpkey_vers = get_option('wp2pgpmail_pgpkey_vers');
+		$wp2pgpmail_pgpkey_pktype = get_option('wp2pgpmail_pgpkey_pktype');
+		$wp2pgpmail_pgpkey = get_option('wp2pgpmail_pgpkey');
+		
+		$mail_champ_nom = __('Name','wp2pgpmail');
+		$mail_champ_email = __('E-mail Address','wp2pgpmail');
+		$mail_champ_message = __('Message','wp2pgpmail');
+		$mail_champ_adresseIP = __('IP Address','wp2pgpmail');
+		$mail_footer = __('This message has been sent from your website','wp2pgpmail') .' '. get_permalink() .' '. __('and has been encrypted using wp2pgpmail.','wp2pgpmail');
+		
+		$message_champ_incomplet = __('A field has not been completed. Thank you to complete in order to validate the form.','wp2pgpmail');
+		$message_email_incorrect = __('The email address you typed is incorrect.','wp2pgpmail');
+		$message_champ_crypte = __('encrypted data','wp2pgpmail');
+		
+		$formulaire_adresse_page = get_permalink();
+		$formulaire_champ_nom = __('Your Name','wp2pgpmail');
+		$formulaire_champ_email = __('Your E-mail Address','wp2pgpmail');
+		$fomulaire_champ_message = __('Your Message','wp2pgpmail');
+		$formulaire_bouton_encrypter = __('Encrypt Message','wp2pgpmail');
+		$formulaire_bouton_reset = __('Reset','wp2pgpmail');
+		$formulaire_bouton_recharger_image = __('Reload image','wp2pgpmail');
+		$formulaire_champ_captcha = __('Type the word:','wp2pgpmail');
+		$formulaire_bouton_envoyer = __('Send','wp2pgpmail');
+		
+		$adresseIP = $_SERVER['REMOTE_ADDR'];
+		
+		$this->Output = <<<EOF
+<!-- wp2pgpmail - Begin -->
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/rsa.js" type="text/javascript"></script> 
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/aes-enc.js" type="text/javascript"></script> 
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/base64.js" type="text/javascript"></script> 
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/PGpubkey.js" type="text/javascript"></script> 
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/mouse.js" type="text/javascript"></script> 
+<script src="$siteurl/wp-content/plugins/wp2pgpmail/js/PGencode.js" type="text/javascript"></script> 
+<script type="text/javascript"> 
+
+var keytyp = 1;
+var keyid  = '$wp2pgpmail_pgpkey_keyid';
+var pubkey = '$wp2pgpmail_pgpkey_pkey';
+ 
+function getkey() {
+	var pu=new getPublicKey(document.s.pubkey.value);
+	if(pu.vers == -1) return;
+
+	document.s.vers.value=pu.vers;
+	document.s.user.value=pu.user;
+	document.s.keyid.value=pu.keyid;
+
+	pubkey = pu.pkey.replace(/\\\\n/g,'');
+	document.s.pkey.value=pubkey;
+	document.s.pktype.value=pu.type;
+}
+ 
+
+function encrypt() {
+	
+	if ( document.t.message_from_name.value == "" || document.t.message_from_mail.value == "" || document.t.message_body.value == "" ) {
+		alert("$message_champ_incomplet");
+		return false;
+	}
+	
+	var reg = new RegExp('^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$', 'i');
+	if(!reg.test(document.t.message_from_mail.value)) {
+		alert("$message_email_incorrect");
+		return false;
+	}
+	
+	document.t.message_from_name.readOnly=true;
+	document.t.message_from_mail.readOnly=true;
+	document.t.message_body.readOnly=true;
+	document.t.message.value = "$mail_champ_nom : " + document.t.message_from_name.value + "\\n" + "$mail_champ_email : " + document.t.message_from_mail.value + "\\n" + "$mail_champ_message : " + document.t.message_body.value + "\\n\\n";
+	document.t.message.value += "$mail_champ_adresseIP : " + "$adresseIP" + "\\n\\n";
+	document.t.message.value += "$mail_footer" + "\\n\\n" + "http://wp2pgpmail.com/";
+	document.t.bouton_envoi.disabled=false;
+	document.t.encrypter.disabled=true;
+	
+	keyid="$wp2pgpmail_pgpkey_keyid";
+	if(document.s.keyid.value.length) keyid=document.s.keyid.value;
+	if(keyid.length != 16) {
+		alert('Invalid Key Id');
+		return;
+	}
+	 
+	 keytyp = 1;
+	 if(document.s.pktype.value == 'ELGAMAL') keytyp = 1;
+	 if(document.s.pktype.value == 'RSA')     keytyp = 0;
+	 if(keytyp == -1) {
+		alert('Unsupported Key Type');
+		return;
+	 } 
+	 
+	 var startTime=new Date();
+	 
+	 var text=document.t.text.value+'\\r\\n';
+	 document.t.text.value=doEncrypt(keyid, keytyp, pubkey, text);
+	 
+	 var endTime=new Date();
+	 document.t.howLong.value=(endTime.getTime()-startTime.getTime())/1000.0;
+	 
+	 document.t.message_from_name.value="-- "+"$message_champ_crypte"+" --";
+	 document.t.message_from_mail.value="-- "+"$message_champ_crypte"+" --";
+	 document.t.message_body.value="-- "+"$message_champ_crypte"+" --";
+	 
+	 return true;
+}
+
+
+function recommencer() {
+	document.t.message_from_name.readOnly=false;
+	document.t.message_from_mail.readOnly=false;
+	document.t.message_body.readOnly=false;
+	document.t.bouton_envoi.disabled=true;
+	document.t.encrypter.disabled=false;
+}
+</script> 
+<form name="t" action="$formulaire_adresse_page" method="post">
+				<table style="border-width: 0px;">
+					<tr>
+						<td style="border-width: 0px;">$formulaire_champ_nom :</td>
+						<td style="border-width: 0px;"><input type="text" name="message_from_name" id="message_from_name" value="" size="34" /></td>
+					</tr>
+					<tr>
+						<td style="border-width: 0px;">$formulaire_champ_email :</td>
+						<td style="border-width: 0px;"><input type="text" name="message_from_mail" id="message_from_mail" value="" size="34" /></td>
+					</tr>
+				</table>
+				$fomulaire_champ_message :<br />
+				<textarea name="message_body" id="message_body" value="" rows="15" cols="50"></textarea>
+				<br />
+				<input type="hidden" name="text" id="message" />
+				<input type="hidden" name="howLong" />
+				<input type="hidden" name="submitted" id="submitted" value="true" />
+				<br /> 
+				<table style="border-width: 0px;">
+					<tr>
+						<td style="border-width: 0px;"><input onclick="encrypt();" type="button" value="$formulaire_bouton_encrypter" id="encrypter"></td>
+						<td style="border-width: 0px;"><input onclick="recommencer();" type="reset" value="$formulaire_bouton_reset"></td>
+					</tr>
+					<tr>
+						<td colspan="2" style="border-width: 0px;">
+							<img src="$siteurl/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_show.php" id="captcha" alt="" /><a href="#" onclick="document.getElementById('captcha').src = '$siteurl/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_show.php?' + Math.random(); return false"><img src="$siteurl/wp-content/plugins/wp2pgpmail/images/reload.png" alt="$formulaire_bouton_recharger_image" border="0" /></a><br />
+							$formulaire_champ_captcha<br />
+							<input type="text" size="10" maxlength="6" name="code" /><br />
+							<input type="submit" name="submit" id="bouton_envoi" value="$formulaire_bouton_envoyer" /></td>
+					</tr>
+						
+				</table>
+
+
+</form>
+
+<script type="text/javascript"> 
+document.t.bouton_envoi.disabled=true;
+</script>
+<form name="s">
+	<input type="hidden" name="pubkey" value="$wp2pgpmail_pgpkey" />
+	<input type="hidden" name="vers" value="$wp2pgpmail_pgpkey_vers" />
+	<input type="hidden" name="keyid" value="$wp2pgpmail_pgpkey_keyid" />
+	<input type="hidden" name="pktype" value="$wp2pgpmail_pgpkey_pktype" />
+	<input type="hidden" name="pkey" value="$wp2pgpmail_pgpkey_pkey" />
+</form>
+<!-- wp2pgpmail - End -->
+EOF;
+		return $this->Output;
+	}
+}
\ No newline at end of file
diff --git a/wp-content/plugins/wp2pgpmail/classes/index.php b/wp-content/plugins/wp2pgpmail/classes/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/css/sprite.png b/wp-content/plugins/wp2pgpmail/css/sprite.png
new file mode 100644
index 0000000000000000000000000000000000000000..afd5a915e6121e687e7511c511b309beecfd4293
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/css/sprite.png differ
diff --git a/wp-content/plugins/wp2pgpmail/css/wp2pgpmail-admin.css b/wp-content/plugins/wp2pgpmail/css/wp2pgpmail-admin.css
new file mode 100644
index 0000000000000000000000000000000000000000..4f17d1ebb94d160ae7f78b5216d62adf8ae9c9e9
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/css/wp2pgpmail-admin.css
@@ -0,0 +1 @@
+label.error{color:red;display:block}#wp2pgpmail-update input.error,#wp2pgpmail-update textarea.error,#wp2pgpmail-update select.error{border:1px solid red}.menu-item-handle.fieldset,#form-element-fieldset{background-image:-moz-linear-gradient(top,#e3e3e3 0,#ccc 100%);background-image:-o-linear-gradient(top,#e3e3e3 0,#ccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#e3e3e3),color-stop(1,#ccc));background-image:linear-gradient(top,#e3e3e3 0,#ccc 100%);box-shadow:0 1px 0 #e3e3e3 inset}.sender-labels{width:80px}.is-field-required{color:#bc1212;vertical-align:middle}.wp2pgpmail-inline-edit{width:100%}.wp2pgpmail-inline-edit-col{padding:0 .5em}.wp2pgpmail-inline-edit label{display:block;margin:.2em 0}.wp2pgpmail-inline-edit .title{display:block;float:left;width:5em;font-style:italic}.wp2pgpmail-inline-edit .input-text-wrap{display:block;margin-left:5em}.wp2pgpmail-inline-edit .input-text-wrap input[type="text"]{width:100%;border:#DDD solid 1px;border-radius:3px}.subsubsub{float:none}.nav-tabs-arrow-left{display:none}#form-items input{width:104px;float:left;margin:0 5px 10px 0}#form-element-text{background:url(sprite.png) 0 -89px no-repeat transparent}#form-element-textarea{background:url(sprite.png) 0 -173px no-repeat transparent}#form-element-checkbox{background:url(sprite.png) 0 -259px no-repeat transparent}#form-element-radio{background:url(sprite.png) 0 -51px no-repeat transparent}#form-element-select{background:url(sprite.png) 0 -7px no-repeat transparent}#form-element-address{background:url(sprite.png) 0 -129px no-repeat transparent}#form-element-datepicker{background:url(sprite.png) 0 -215px no-repeat transparent}#form-element-email{background:url(sprite.png) 0 -304px no-repeat transparent}#form-element-url{background:url(sprite.png) 0 -356px no-repeat transparent}#form-element-currency{background:url(sprite.png) 0 -405px no-repeat transparent}#form-element-digits{background:url(sprite.png) 0 -452px no-repeat transparent}#form-element-time{background:url(sprite.png) 0 -489px no-repeat transparent}#form-element-phone{background:url(sprite.png) 0 -529px no-repeat transparent}#form-element-html{background:url(sprite.png) 0 -559px no-repeat transparent}#form-element-file{background:url(sprite.png) 0 -587px no-repeat transparent}#form-element-instructions{background:url(sprite.png) 0 -621px no-repeat transparent}#form-element-section{background:url(sprite.png) 0 -809px no-repeat transparent}#form-details-nav{font-size:1.0em;font-weight:bold;padding-top:10px}#form-details-nav a{padding:5px 10px;text-decoration:none}#form-details-nav a.current{background-color:#777;background-image:-ms-linear-gradient(bottom,#6d6d6d,#808080);background-image:-moz-linear-gradient(bottom,#6d6d6d,#808080);background-image:-o-linear-gradient(bottom,#6d6d6d,#808080);background-image:-webkit-gradient(linear,left bottom,left top,from(#6d6d6d),to(#808080));background-image:-webkit-linear-gradient(bottom,#6d6d6d,#808080);background-image:linear-gradient(bottom,#6d6d6d,#808080);color:white;border-radius:5px;height:40px;text-shadow:0 -1px 0 #333;border-color:#dfdfdf}.form-details,#form-success-message-text,#form-success-message-page,#form-success-message-redirect{display:none}.form-details-current,.active{display:block}#confirmation-message textarea,#notification textarea{font-family:Consolas,Monaco,monospace;width:75%;height:10em;margin-top:10px}#form-success-message-page,#form-success-message-redirect{margin-top:10px}.post-body-plain ol li{list-style:decimal}#promote-wp2pgpmail li{padding-left:20px}#promote-wp2pgpmail #twitter{background:url(sprite.png) -10px -746px no-repeat transparent}#promote-wp2pgpmail #star{background:url(sprite.png) -10px -710px no-repeat transparent}#promote-wp2pgpmail #paypal{background:url(sprite.png) -10px -777px no-repeat transparent}.menu .ui-nestedSortable-error{background-color:#fbe3e4;border-color:red;color:#8a1f11}ul#menu-to-edit ul{margin:0 0 0 25px;padding:0;list-style-type:none;width:98%}.wp2pgpmail-details{padding:0 10px;border:1px solid #ccc;margin-bottom:10px;border-radius:3px;width:95%}.wp2pgpmail-details.section{background-color:#efefef;width:97.55%}.wp2pgpmail-details .postbox{min-height:60px}#poststuff .wp2pgpmail-details h2{margin-top:0}#poststuff h3.section-heading{padding-left:0}.wp2pgpmail-pro-call-to-action a{text-decoration:none}.wp2pgpmail-pro-call-to-action:hover{border-color:#dbf1ff}.wp2pgpmail-pro-call-to-action{background-color:#3d93cd;border:5px solid #b0d2e8;border-radius:7px;box-shadow:inset 1px 1px 5px #398cc3,inset -1px -25px 5px #398cc3,0px 0 0 #fff;height:37px;margin:0 auto;padding:5px 30px 10px 30px;text-shadow:0 1px #2b658c;width:115px;line-height:22px}.wp2pgpmail-pro-call-to-action .cta-sign-up{color:#fff;display:block;font-size:24px;font-weight:bold;text-align:center;text-decoration:none;text-shadow:1px 1px 1px #2b658c;width:100%;line-height:22px}.wp2pgpmail-pro-call-to-action .cta-price{color:#ace7ff;display:block;font-size:12px;font-weight:normal;line-height:20px;text-align:center;text-decoration:none;width:100%;line-height:20px}.wp2pgpmail-pro-upgrade{width:350px;float:left;padding:10px;background-color:#d3e7ee;border:1px solid #21759b;border-radius:5px}.wp2pgpmail-pro-upgrade ul{list-style:outside;margin-left:10px}.post-body-plain{width:430px;float:left}#menu-instructions.post-body-plain{width:auto;float:none}.wp2pgpmail-button{position:relative;overflow:visible;display:inline-block;border:1px solid #d4d4d4;margin:0;padding:.5em 2.5em .5em 1em;text-decoration:none;text-shadow:1px 1px 0 #fff;font:12px/normal sans-serif;color:#333;white-space:nowrap;cursor:pointer;outline:0;background-color:#ececec;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f4f4f4),to(#ececec));background-image:-moz-linear-gradient(#f4f4f4,#ececec);background-image:-o-linear-gradient(#f4f4f4,#ececec);background-image:linear-gradient(#f4f4f4,#ececec);-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em;zoom:1;*display:inline}.wp2pgpmail-button:hover,.wp2pgpmail-button:active,.wp2pgpmail-button.current{border-color:#3072b3;border-bottom-color:#2a65a0;text-decoration:none;text-shadow:-1px -1px 0 rgba(0,0,0,0.3);color:#fff;background-color:#3072b3;background-image:-webkit-gradient(linear,0 0,0 100%,from(#599bdc),to(#3072b3));background-image:-moz-linear-gradient(#599bdc,#3072b3);background-image:-o-linear-gradient(#599bdc,#3072b3);background-image:linear-gradient(#599bdc,#3072b3)}.wp2pgpmail-button.current{font-weight:bold}.wp2pgpmail-button::-moz-focus-inner{padding:0;border:0}.wp2pgpmail-button.wp2pgpmail-delete{color:#900}.wp2pgpmail-button.wp2pgpmail-delete:hover,.wp2pgpmail-button.wp2pgpmail-delete:focus,.wp2pgpmail-button.wp2pgpmail-delete:active{border-color:#b53f3a;border-bottom-color:#a0302a;color:#fff;background-color:#dc5f59;background-image:-webkit-gradient(linear,0 0,0 100%,from(#dc5f59),to(#b33630));background-image:-moz-linear-gradient(#dc5f59,#b33630);background-image:-o-linear-gradient(#dc5f59,#b33630);background-image:linear-gradient(#dc5f59,#b33630)}.wp2pgpmail-button.wp2pgpmail-delete:active,.wp2pgpmail-button.wp2pgpmail-delete.active{border-color:#a0302a;border-bottom-color:#bf4843;background-color:#b33630;background-image:-webkit-gradient(linear,0 0,0 100%,from(#b33630),to(#dc5f59));background-image:-moz-linear-gradient(#b33630,#dc5f59);background-image:-o-linear-gradient(#b33630,#dc5f59);background-image:linear-gradient(#b33630,#dc5f59)}.wp2pgpmail-button.wp2pgpmail-duplicate:hover,.wp2pgpmail-button.wp2pgpmail-duplicate:focus,.wp2pgpmail-button.wp2pgpmail-duplicate:active{border-color:#8gfc400;border-bottom-color:#8gfc400;color:#fff;background-color:#82ba0b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#7cbc0a),to(#82ba0b));background-image:-moz-linear-gradient(#7cbc0a,#82ba0b);background-image:-o-linear-gradient(#7cbc0a,#82ba0b);background-image:linear-gradient(#7cbc0a,#82ba0b)}.button-group{display:inline-block;list-style:none;margin-top:10px}.button-group .wp2pgpmail-button{float:left;margin-left:-1px}.wp2pgpmail-button.wp2pgpmail-first{border-bottom-right-radius:0;border-top-right-radius:0}.wp2pgpmail-button.wp2pgpmail-last{border-bottom-left-radius:0;border-top-left-radius:0}.button-icon{width:18px;height:24px;position:absolute;top:0;right:0}.button-icon.arrow{background:url("arrows.png") no-repeat scroll 0 -118px transparent}.current .button-icon.arrow{background:url("arrows.png") no-repeat scroll 0 -30px transparent}.button-icon.plus{background:url("sprite.png") no-repeat scroll -12px -644px transparent}.button-icon.delete{background:url("sprite.png") no-repeat scroll -12px -671px transparent}#form-settings{width:460px;display:none}#form-settings.current{display:block}.form-details{padding:20px;background:rgba(255,255,255,0.5);box-shadow:0 0 0 1px rgba(155,155,155,0.3)}.form-details.on{display:block}.settings-links{background:none repeat scroll 0 0 #f5f5f5;box-shadow:0 0 0 1px rgba(155,155,155,0.3),1px 0 0 0 rgba(255,255,255,0.9) inset,0px 2px 2px rgba(0,0,0,0.1);color:#777;cursor:pointer;display:block;font-family:Arial,Helvetica,sans-serif;font-size:15px;font-weight:bold;height:25px;line-height:28px;padding:5px 15px;position:relative;text-shadow:1px 1px 1px rgba(255,255,255,0.8);text-decoration:none;text-transform:uppercase;z-index:20}.settings-links .arrow{position:absolute;width:24px;height:24px;right:13px;top:7px;background:url("arrows.png") no-repeat scroll 8px -278px transparent}.settings-links.on .arrow{background:url("arrows.png") no-repeat scroll 8px -252px transparent}.settings-links:hover,.settings-links.on{background:#c6e1ec;color:#3d7489;text-shadow:0 1px 1px rgba(255,255,255,0.6);box-shadow:0 0 0 1px rgba(155,155,155,0.3),0px 2px 2px rgba(0,0,0,0.1)}.wp2pgpmail-tooltip{position:relative;float:right;cursor:pointer;width:16px;height:16px;margin-right:2px}.tooltip{text-indent:0;z-index:200;width:175px;padding:5px 20px;border-radius:5px;border:2px solid white;box-shadow:0 0 7px black;background:rgba(0,0,0,0.6);position:absolute;top:-40px;display:none;font-style:normal;color:white}.tooltip h3{font-weight:bold;font-size:16px;padding-bottom:6px;margin:5px 0;border-bottom:1px solid white}.tooltip p{font-size:12px;margin-top:10px}
\ No newline at end of file
diff --git a/wp-content/plugins/wp2pgpmail/i18n/index.php b/wp-content/plugins/wp2pgpmail/i18n/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.mo b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.mo
new file mode 100644
index 0000000000000000000000000000000000000000..9b3857749bac83a172eceb5f8c9f2a02b5b8c94e
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.mo differ
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.po b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.po
new file mode 100644
index 0000000000000000000000000000000000000000..f97cf4c2cc585581f9a556bc513c2fee35df472e
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-de_DE.po
@@ -0,0 +1,232 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wp2pgpmail v1.13\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-08-02 17:26+0100\n"
+"PO-Revision-Date: 2013-07-23 18:52:31+0000\n"
+"Last-Translator: \n"
+"Language-Team: Jeriel BELAICH <jeriel@belai.ch>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: CSL v1.x\n"
+"X-Poedit-Language: English\n"
+"X-Poedit-Country: UNITED STATES\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-Bookmarks: \n"
+"X-Poedit-SearchPath-0: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk\n"
+"X-Textdomain-Support: yes"
+
+#: wp2pgpmail.php:47
+#@ wp2pgpmail
+msgid "Form successfully submitted! The encrypted message has been sent."
+msgstr "Erfolgreiche Übertragung! Die verschlüsselte Nachricht wurde gesendet."
+
+#: wp2pgpmail.php:43
+#@ wp2pgpmail
+msgid "Encrypted PGP Message"
+msgstr "PGP-verschlüsselte Nachricht"
+
+#: wp2pgpmail.php:49
+#@ wp2pgpmail
+msgid "The image verification code you entered is incorrect. No message has been sent."
+msgstr "Der Bildcode wurde falsch eingegeben. Die Nachricht wurde nicht gesendet."
+
+#: wp2pgpmail.php:49
+#@ wp2pgpmail
+msgid "Please try again."
+msgstr "Bitte versuchen Sie es erneut."
+
+#: classes/formulaire.inc.php:18
+#@ wp2pgpmail
+msgid "A field has not been completed. Thank you to complete in order to validate the form."
+msgstr "Ein Formularfeld wurde nicht ausgefüllt. Bitte vervollständigen Sie die Angaben."
+
+#: classes/formulaire.inc.php:19
+#@ wp2pgpmail
+msgid "The email address you typed is incorrect."
+msgstr "Die eingegebene E-Mail-Adresse ist nicht korrekt."
+
+#: classes/formulaire.inc.php:12
+#@ wp2pgpmail
+msgid "Name"
+msgstr "Name"
+
+#: classes/formulaire.inc.php:13
+#@ wp2pgpmail
+msgid "E-mail Address"
+msgstr "E-Mail-Adresse"
+
+#: classes/formulaire.inc.php:14
+#@ wp2pgpmail
+msgid "Message"
+msgstr "Mitteilung"
+
+#: classes/formulaire.inc.php:15
+#@ wp2pgpmail
+msgid "IP Address"
+msgstr "IP-Adresse"
+
+#: classes/formulaire.inc.php:16
+#@ wp2pgpmail
+msgid "This message has been sent from your website"
+msgstr "Diese Nachricht wurde von Ihrer Website gesendet."
+
+#: classes/formulaire.inc.php:16
+#@ wp2pgpmail
+msgid "and has been encrypted using wp2pgpmail."
+msgstr "und wurde mit wp2pgpmail verschlüsselt."
+
+#: classes/formulaire.inc.php:20
+#@ wp2pgpmail
+msgid "encrypted data"
+msgstr "verschlüsselte Daten"
+
+#: classes/formulaire.inc.php:23
+#@ wp2pgpmail
+msgid "Your Name"
+msgstr "Ihr Name"
+
+#: classes/formulaire.inc.php:24
+#@ wp2pgpmail
+msgid "Your E-mail Address"
+msgstr "Ihre E-Mail-Adresse"
+
+#: classes/formulaire.inc.php:25
+#@ wp2pgpmail
+msgid "Your Message"
+msgstr "Ihre Mitteilung"
+
+#: classes/formulaire.inc.php:26
+#@ wp2pgpmail
+msgid "Encrypt Message"
+msgstr "Mitteilung verschlüsseln"
+
+#: classes/formulaire.inc.php:27
+#@ wp2pgpmail
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: classes/formulaire.inc.php:28
+#@ wp2pgpmail
+msgid "Reload image"
+msgstr "Bild neu laden"
+
+#: classes/formulaire.inc.php:29
+#@ wp2pgpmail
+msgid "Type the word:"
+msgstr "Geben Sie die Zeichen ein:"
+
+#: classes/formulaire.inc.php:30
+#@ wp2pgpmail
+msgid "Send"
+msgstr "Senden"
+
+#: wp2pgpmail.php:61
+#@ wp2pgpmail
+msgid "No valid public PGP key has been entered yet."
+msgstr "Es wurde kein gültiger öffentlicher PGP-Schlüssel hinterlegt."
+
+#: wp2pgpmail.php:63
+#@ wp2pgpmail
+msgid "Your PGP public key has been entered correctly."
+msgstr "Ihr öffentlicher PGP-Schlüssel wurde korrekt hinterlegt."
+
+#: wp2pgpmail.php:145
+#@ wp2pgpmail
+msgid "Version:"
+msgstr "Version :"
+
+#: wp2pgpmail.php:149
+#@ wp2pgpmail
+msgid "User ID:"
+msgstr "Nutzer-ID:"
+
+#: wp2pgpmail.php:153
+#@ wp2pgpmail
+msgid "Key ID:"
+msgstr "Schlüssel-ID:"
+
+#: wp2pgpmail.php:157
+#@ wp2pgpmail
+msgid "Public Key type and values:"
+msgstr "Art und Gültigkeit des Schlüssels:"
+
+#: wp2pgpmail.php:178
+#@ default
+msgid "Save Changes"
+msgstr "Änderungen speichern."
+
+#: wp2pgpmail.php:113
+#@ wp2pgpmail
+msgid "Getting Started"
+msgstr "Zu Beginn:"
+
+#: wp2pgpmail.php:115
+#@ wp2pgpmail
+msgid "Enter your PGP public key in the field below on this page."
+msgstr "Geben Sie Ihren öffentlichen PGP-Schlüssel in das Feld unten auf dieser Seite ein."
+
+#: wp2pgpmail.php:116
+#@ wp2pgpmail
+msgid "Add the shortcode <b>[wp2pgpmail]</b> to any Post or Page to display the contact form."
+msgstr "Fügen Sie den Shortcode <b>[wp2pgpmail]</b> in beliebige Posts oder Seiten ein, um das Kontaktformular anzuzeigen."
+
+#: wp2pgpmail.php:119
+#@ wp2pgpmail
+msgid "Help Promote wp2pgpmail"
+msgstr "Helfen Sie dabei, wp2pgpmail bekannt zu machen."
+
+#: wp2pgpmail.php:121
+#@ wp2pgpmail
+msgid "Get wp2pgpmail Pro version with Additional Fields, Unlimited Forms, Nested Drag n' Drop and Advanced Email Configuration!"
+msgstr "Holen Sie sich wp2pgpmail Pro mit zusätzlichen Feldern, einer unbegrenzten Zahl an Formularen, eigebundenem Drag and Drop und erweiterter E-Mail-Konfiguration!"
+
+#: wp2pgpmail.php:122
+#@ wp2pgpmail
+msgid "Follow us on Twitter"
+msgstr "Folgen Sie uns auf Twitter!"
+
+#: wp2pgpmail.php:123
+#@ wp2pgpmail
+msgid "Rate wp2pgpmail on WordPress.org"
+msgstr "Bewerten Sie wp2pgpmail auf Wordpress.org."
+
+#: wp2pgpmail.php:129
+#@ wp2pgpmail
+msgid "PGP Key Setup"
+msgstr "Einrichtung des PGP-Schlüssels"
+
+#: wp2pgpmail.php:130
+#@ wp2pgpmail
+msgid "Paste your PGP public key in the first field below. By validating, your key will be recognized and the other fields will be automatically filled."
+msgstr "Kopieren Sie Ihren öffentlichen PGP-Schlüssel in das erste Feld unten. Durch die Validierung wird ihr Schlüssel erkannt, und die anderen Felder werden automatisch ausgefüllt."
+
+#: wp2pgpmail.php:182
+#@ wp2pgpmail
+msgid "Need help?"
+msgstr "Brauchen Sie Hilfe?"
+
+#: wp2pgpmail.php:184
+#@ wp2pgpmail
+msgid "Infomation about PGP from wp2pgpmail"
+msgstr "Informationen über PGP von wp2pgpmail"
+
+#: wp2pgpmail.php:185
+#@ wp2pgpmail
+msgid "wp2pgpmail FAQ"
+msgstr "wp2pgpmail-FAQ"
+
+#: wp2pgpmail.php:186
+#@ wp2pgpmail
+msgid "wp2pgpmail Support Ticket System"
+msgstr "wp2pgpmail-Support-Ticket-System"
+
+#: wp2pgpmail.php:187
+#@ wp2pgpmail
+msgid "wp2pgpmail Forums"
+msgstr "wp2pgpmail-Foren"
+
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.mo b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.mo
new file mode 100644
index 0000000000000000000000000000000000000000..bee202d510c8124a50160be978c3a0342a5294e3
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.mo differ
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.po b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.po
new file mode 100644
index 0000000000000000000000000000000000000000..704cd157fb6fe75ec21f491775b0786d38f1ff2b
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-es_ES.po
@@ -0,0 +1,132 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wp2pgpmail 1.03\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-08-02 17:26+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: José Juan González <j_arquimbau@yahoo.es>\n"
+"Language-Team: Jeriel BELAICH <jeriel@belai.ch>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: English\n"
+"X-Poedit-Country: UNITED STATES\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-KeywordsList: __;_e;_c\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk\n"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:47
+msgid "Form successfully submitted! The encrypted message has been sent."
+msgstr "¡Mensaje cifrado enviado correctamente!"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "Encrypted PGP Message"
+msgstr "Mensaje PGP cifrado"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:56
+msgid "The image verification code you entered is incorrect. No message has been sent."
+msgstr "El código de verificación de imagen que ha introducido no es correcto. No se ha enviado el mensaje."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:57
+msgid "Please try again."
+msgstr "Por favor, pruebe de nuevo."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:92
+msgid "A field has not been completed. Thank you to complete in order to validate the form."
+msgstr "Un campo no ha sido rellenado. Rellénelo para poder enviar el mensaje."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:98
+msgid "The email address you typed is incorrect."
+msgstr "La dirección email facilitada es incorrecta."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "Name"
+msgstr "Nombre"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "E-mail Address"
+msgstr "Dirección de correo electrónico"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "Message"
+msgstr "Mensaje"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:106
+msgid "IP Address"
+msgstr "Dirección IP"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:107
+msgid "This message has been sent from your website"
+msgstr "Este mensaje ha sido enviado desde tu página web"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:107
+msgid "and has been encrypted using wp2pgpmail."
+msgstr "y ha sido cifrado empleando wp2pgpmail."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:134
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:135
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:136
+msgid "encrypted data"
+msgstr "Información cifrada"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:153
+msgid "Your Name"
+msgstr "Su nombre"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:157
+msgid "Your E-mail Address"
+msgstr "Su dirección email"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:161
+msgid "Your Message"
+msgstr "Su mensaje"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:170
+msgid "Encrypt Message"
+msgstr "Cifrar mensaje"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:171
+msgid "Reset"
+msgstr "Reiniciar"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:175
+msgid "Reload image"
+msgstr "Recargar imagen"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:176
+msgid "Type the word:"
+msgstr "Teclee la palabra:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:178
+msgid "Send"
+msgstr "Enviar"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:207
+msgid "No valid public PGP key has been entered yet."
+msgstr "No se ha introducido una clave PGP válida todavía."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:209
+msgid "Your PGP public key has been entered correctly."
+msgstr "Su clave pública PGP se ha introducido correctamente."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:272
+msgid "Version:"
+msgstr "Versión:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:276
+msgid "User ID:"
+msgstr "ID Usuario:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:280
+msgid "Key ID:"
+msgstr "ID Clave:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:284
+msgid "Public Key type and values:"
+msgstr "Tipo de clave pública y valores:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:305
+msgid "Save Changes"
+msgstr "Guardar cambios"
+
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.mo b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.mo
new file mode 100644
index 0000000000000000000000000000000000000000..7b73661b65d8fb13dae082e1ca2c76065618778d
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.mo differ
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.po b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.po
new file mode 100644
index 0000000000000000000000000000000000000000..096bd4fb4d603729174f70eb8c06eaab29442edb
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail-fr_FR.po
@@ -0,0 +1,186 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wp2pgpmail 1.03\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-06 14:31+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Jériel BELAÏCH\n"
+"Language-Team: Jeriel BELAICH <jeriel@belai.ch>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: English\n"
+"X-Poedit-Country: UNITED STATES\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-KeywordsList: __;_e;_c\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk\n"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:43
+msgid "Encrypted PGP Message"
+msgstr "Message PGP sécurisé"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:47
+msgid "Form successfully submitted! The encrypted message has been sent."
+msgstr "Formulaire soumis avec succès ! Le message crypté a été correctement envoyé."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "The image verification code you entered is incorrect. No message has been sent."
+msgstr "Le code de l'image de contrôle que vous avez saisi est incorrect. Aucun message n'a été transmis."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "Please try again."
+msgstr "Merci d'essayer à nouveau."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:61
+msgid "No valid public PGP key has been entered yet."
+msgstr "Aucune clé publique PGP n'a encore été saisie."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:63
+msgid "Your PGP public key has been entered correctly."
+msgstr "Votre clé publique PGP a été correctement saisie."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:113
+msgid "Getting Started"
+msgstr "Mise en route"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:115
+msgid "Enter your PGP public key in the field below on this page."
+msgstr "Saisissez votre clé publique PGP sur cette page dans le champ ci-dessous."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:116
+msgid "Add the shortcode <b>[wp2pgpmail]</b> to any Post or Page to display the contact form."
+msgstr "Insérez le shortcode <b>[wp2pgpmail]</b> dans n'importe quel article ou n'importe quelle page pour afficher le formulaire de contact."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:119
+msgid "Help Promote wp2pgpmail"
+msgstr "Contribuez avec wp2pgpmail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:121
+msgid "Get wp2pgpmail Pro version with Additional Fields, Unlimited Forms, Nested Drag n' Drop and Advanced Email Configuration!"
+msgstr "Obtenez la version Pro de wp2pgpmail et bénéficiez des champs supplémentaires, un nombre de formulaire illimité, une interface intuitive et une configuration avancée des e-mails."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:122
+msgid "Follow us on Twitter"
+msgstr "Suivez-nous sur Twitter"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:123
+msgid "Rate wp2pgpmail on WordPress.org"
+msgstr "Notez wp2pgpmail sur WordPress.org"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:129
+msgid "PGP Key Setup"
+msgstr "Paramétrage de la clé PGP"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:130
+msgid "Paste your PGP public key in the first field below. By validating, your key will be recognized and the other fields will be automatically filled."
+msgstr "Collez votre clé publique PGP dans le premier champ ci-dessous. En validant, votre clé sera reconnue et les autres champs seront automatiquement remplis."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:145
+msgid "Version:"
+msgstr "Version :"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:149
+msgid "User ID:"
+msgstr "Identification de l'utilisateur :"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:153
+msgid "Key ID:"
+msgstr "Identification de la clé :"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:157
+msgid "Public Key type and values:"
+msgstr "Détails de la clé :"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:178
+msgid "Save Changes"
+msgstr "Enregistrer les modifications"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:182
+msgid "Need help?"
+msgstr "Besoin d'aide ?"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:184
+msgid "Infomation about PGP from wp2pgpmail"
+msgstr "Informations au sujet de PGP à partir du site wp2pgpmail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:185
+msgid "wp2pgpmail FAQ"
+msgstr "FAQ wp2pgpmail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:186
+msgid "wp2pgpmail Support Ticket System"
+msgstr "Assistance wp2pgpmail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:187
+msgid "wp2pgpmail Forums"
+msgstr "Forum wp2pgpmail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:12
+msgid "Name"
+msgstr "Nom"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:13
+msgid "E-mail Address"
+msgstr "Adresse E-mail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:14
+msgid "Message"
+msgstr "Message"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:15
+msgid "IP Address"
+msgstr "Adresse IP"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:16
+msgid "This message has been sent from your website"
+msgstr "Ce message a été envoyé à partir de la page de votre site"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:16
+msgid "and has been encrypted using wp2pgpmail."
+msgstr "et a été crypté grâce au plugin wp2pgpmail."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:18
+msgid "A field has not been completed. Thank you to complete in order to validate the form."
+msgstr "Un des champs n'a pas été rempli. Merci de le compléter."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:19
+msgid "The email address you typed is incorrect."
+msgstr "L'adresse e-mail saisie est incorrecte."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:20
+msgid "encrypted data"
+msgstr "contenu crypté"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:23
+msgid "Your Name"
+msgstr "Votre nom"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:24
+msgid "Your E-mail Address"
+msgstr "Votre adresse e-mail"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:25
+msgid "Your Message"
+msgstr "Votre message"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:26
+msgid "Encrypt Message"
+msgstr "Crypter le message"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:27
+msgid "Reset"
+msgstr "Effacer"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:28
+msgid "Reload image"
+msgstr "Recharger une nouvelle image"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:29
+msgid "Type the word:"
+msgstr "Saisir le mot :"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:30
+msgid "Send"
+msgstr "Envoyer"
+
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail.pot b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail.pot
new file mode 100644
index 0000000000000000000000000000000000000000..fdc8345574f693facfdf0efe2a373e2f5374089a
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail.pot
@@ -0,0 +1,186 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: wp2pgpmail 1.03\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-06-06 14:31+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Jériel BELAÏCH\n"
+"Language-Team: Jeriel BELAICH <jeriel@belai.ch>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: English\n"
+"X-Poedit-Country: UNITED STATES\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-KeywordsList: __;_e;_c\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SearchPath-0: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk\n"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:43
+msgid "Encrypted PGP Message"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:47
+msgid "Form successfully submitted! The encrypted message has been sent."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "The image verification code you entered is incorrect. No message has been sent."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "Please try again."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:61
+msgid "No valid public PGP key has been entered yet."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:63
+msgid "Your PGP public key has been entered correctly."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:113
+msgid "Getting Started"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:115
+msgid "Enter your PGP public key in the field below on this page."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:116
+msgid "Add the shortcode <b>[wp2pgpmail]</b> to any Post or Page to display the contact form."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:119
+msgid "Help Promote wp2pgpmail"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:121
+msgid "Get wp2pgpmail Pro version with Additional Fields, Unlimited Forms, Nested Drag n' Drop and Advanced Email Configuration!"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:122
+msgid "Follow us on Twitter"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:123
+msgid "Rate wp2pgpmail on WordPress.org"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:129
+msgid "PGP Key Setup"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:130
+msgid "Paste your PGP public key in the first field below. By validating, your key will be recognized and the other fields will be automatically filled."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:145
+msgid "Version:"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:149
+msgid "User ID:"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:153
+msgid "Key ID:"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:157
+msgid "Public Key type and values:"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:178
+msgid "Save Changes"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:182
+msgid "Need help?"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:184
+msgid "Infomation about PGP from wp2pgpmail"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:185
+msgid "wp2pgpmail FAQ"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:186
+msgid "wp2pgpmail Support Ticket System"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:187
+msgid "wp2pgpmail Forums"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:12
+msgid "Name"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:13
+msgid "E-mail Address"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:14
+msgid "Message"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:15
+msgid "IP Address"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:16
+msgid "This message has been sent from your website"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:16
+msgid "and has been encrypted using wp2pgpmail."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:18
+msgid "A field has not been completed. Thank you to complete in order to validate the form."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:19
+msgid "The email address you typed is incorrect."
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:20
+msgid "encrypted data"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:23
+msgid "Your Name"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:24
+msgid "Your E-mail Address"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:25
+msgid "Your Message"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:26
+msgid "Encrypt Message"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:27
+msgid "Reset"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:28
+msgid "Reload image"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:29
+msgid "Type the word:"
+msgstr ""
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/classes/formulaire.inc.php:30
+msgid "Send"
+msgstr ""
+
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.mo b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.mo
new file mode 100644
index 0000000000000000000000000000000000000000..5e684590303283ed1cd9b7b0aba4dc2c0cbf2b0e
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.mo differ
diff --git a/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.po b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.po
new file mode 100644
index 0000000000000000000000000000000000000000..9e288e121ba01ec9d469545bc5618253ce86d1b4
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/i18n/wp2pgpmail_et.po
@@ -0,0 +1,137 @@
+# 
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: wp2pgpmail\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-08-02 17:26+0100\n"
+"PO-Revision-Date: 2012-02-22 15:14+0100\n"
+"Last-Translator: Jériel BELAÏCH\n"
+"Language-Team: Estonian (http://www.transifex.net/projects/p/wp2pgpmail/language/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-Country: UNITED STATES\n"
+"X-Poedit-KeywordsList: __;_e;_c\n"
+"X-Poedit-Language: English\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-SearchPath-0: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk\n"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:47
+msgid "Form successfully submitted! The encrypted message has been sent."
+msgstr "Vorm on saadetud! Krüpteeritud sõnum on saadetud."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:49
+msgid "Encrypted PGP Message"
+msgstr "Krüpteeritud PGP sõnum"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:56
+msgid "The image verification code you entered is incorrect. No message has been sent."
+msgstr "Sinu poolt sisestatud pildi kinnituskood on vale. Sõnumit pole veel saadetud."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:57
+msgid "Please try again."
+msgstr "Palun proovi uuesti."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:92
+msgid "A field has not been completed. Thank you to complete in order to validate the form."
+msgstr "Väli pole täidetud. Palun täida vorm."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:98
+msgid "The email address you typed is incorrect."
+msgstr "Sisestatud e-posti aadress on vigane."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "Name"
+msgstr "Nimi"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "E-mail Address"
+msgstr "E-posti aadress"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:105
+msgid "Message"
+msgstr "Sõnum"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:106
+msgid "IP Address"
+msgstr "IP aadress"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:107
+msgid "This message has been sent from your website"
+msgstr "Sinu veebilehelt saadeti sulle sõnum"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:107
+msgid "and has been encrypted using wp2pgpmail."
+msgstr "ja see on krüpteeritud kasutades wp2pgpmail."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:134
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:135
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:136
+msgid "encrypted data"
+msgstr "krüpteeritud andmed"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:153
+msgid "Your Name"
+msgstr "Sinu nimi"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:157
+msgid "Your E-mail Address"
+msgstr "Sinu e-posti aadress"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:161
+msgid "Your Message"
+msgstr "Sinu sõnum"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:170
+msgid "Encrypt Message"
+msgstr "Krüpteeri sõnum"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:171
+msgid "Reset"
+msgstr "Tühjenda lahtrid"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:175
+msgid "Reload image"
+msgstr "Lae pilt uuesti"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:176
+msgid "Type the word:"
+msgstr "Kirjuta sõna:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:178
+msgid "Send"
+msgstr "aada"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:207
+msgid "No valid public PGP key has been entered yet."
+msgstr "Kehtivat avalikku PGP võtit pole veel sisestatud."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:209
+msgid "Your PGP public key has been entered correctly."
+msgstr "Sinu avalik PGP võti on korrektne."
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:272
+msgid "Version:"
+msgstr "Versioon:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:276
+msgid "User ID:"
+msgstr "Kasutaja ID:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:280
+msgid "Key ID:"
+msgstr "Võtme ID:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:284
+msgid "Public Key type and values:"
+msgstr "Avaliku võtme tüüp ja väärtused:"
+
+#: /home/jeriel/Internet/wp2pgpmail/wp_repository/trunk/wp2pgpmail.php:305
+msgid "Save Changes"
+msgstr "Salvesta muudatused"
+
diff --git a/wp-content/plugins/wp2pgpmail/images/big-icon.png b/wp-content/plugins/wp2pgpmail/images/big-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..c252be1137c5d094bb48c9a7af48b0f34eed7a5a
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/images/big-icon.png differ
diff --git a/wp-content/plugins/wp2pgpmail/images/icon.png b/wp-content/plugins/wp2pgpmail/images/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3824df455f154f26592875179af6b6cf2d29b1ac
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/images/icon.png differ
diff --git a/wp-content/plugins/wp2pgpmail/images/index.php b/wp-content/plugins/wp2pgpmail/images/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/images/reload.png b/wp-content/plugins/wp2pgpmail/images/reload.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d3524219e763f341c46d334777ea22c8099b24a
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/images/reload.png differ
diff --git a/wp-content/plugins/wp2pgpmail/index.php b/wp-content/plugins/wp2pgpmail/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/js/PGencode.js b/wp-content/plugins/wp2pgpmail/js/PGencode.js
new file mode 100644
index 0000000000000000000000000000000000000000..b95a56e197ff0b52bf4e53887883fbaff6587eda
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/PGencode.js
@@ -0,0 +1,280 @@
+
+/* OpenPGP encryption using RSA/AES
+ * Copyright 2005-2006 Herbert Hanewinkel, www.haneWIN.de
+ * version 2.0, check www.haneWIN.de for the latest version
+
+ * This software is provided as-is, without express or implied warranty.  
+ * Permission to use, copy, modify, distribute or sell this software, with or
+ * without fee, for any purpose and by any individual or organization, is hereby
+ * granted, provided that the above copyright notice and this paragraph appear 
+ * in all copies. Distribution as a part of an application or binary must
+ * include the above copyright notice in the documentation and/or other
+ * materials provided with the application or distribution.
+ */
+
+/* We need an unpredictable session key of 128 bits ( = 2^128 possible keys).
+ * If we generate the session key with a PRNG from a small seed we get only
+ * a small number of session keys, e.g. 4 bytes seed => 2^32 keys, a brute
+ * force attack could try all 2^32 session keys. 
+ * (see RFC 1750 - Randomness Recommendations for Security.)
+ *
+ * Sources for randomness in Javascript are limited.
+ * We have load, exec time, seed from random(), mouse movement events
+ * and the timing from key press events.
+ * But even here we have restrictions.
+ * - A mailer will add a timestamp to the encrypted message, therefore
+ *   only the msecs from the clock can be seen as unpredictable.
+ * - Because the Windows timer is still based on the old DOS timer,
+ *   the msecs jump under Windows in 18.2 msecs steps.
+ * - Only a few bits from mouse mouvemen event coordinates are unpredictable,
+ *   if the same buttons are clicked on the screen.
+ */
+
+var rnArray = new Array(256);
+var rnNext = 0;
+var rnRead = 0;
+
+function randomByte() { return Math.round(Math.random()*255)&255; }
+function timeByte() { return ((new Date().getTime())>>>2)&255; }
+
+function rnTimer()
+{
+ var t = timeByte(); // load time
+
+ for(var i=0; i<256; i++)
+ {
+  t ^= randomByte();
+  rnArray[(rnNext++)&255] ^= t;
+ } 
+ window.setTimeout("rnTimer()",randomByte()|128);
+}
+
+// rnTimer() and mouseMoveCollect() are started on page load.
+
+rnTimer();
+eventsCollect();
+
+// ----------------------------------------
+
+function randomString(len, nozero)
+{
+ var r = '';
+ var t = timeByte(); // exec time
+
+ for(var i=0; i<len;)
+ {
+   t ^= rnArray[(rnRead++)&255]^mouseByte()^keyByte();
+   if(t==0 && nozero) continue;
+   i++;
+
+   r+=String.fromCharCode(t);
+ }
+ return r;
+}
+
+// ----------------------------------------
+
+function hex2s(hex)
+{
+ var r='';
+ if(hex.length%2) hex+='0';
+
+ for(var i = 0; i<hex.length; i += 2)
+   r += String.fromCharCode(parseInt(hex.slice(i, i+2), 16));
+ return r;
+}
+
+function crc24(data)
+{
+ var crc = 0xb704ce;
+
+ for(var n=0; n<data.length;n++)
+ {
+   crc ^=(data.charCodeAt(n)&255)<<16;
+   for(i=0;i<8;i++)
+   {
+    crc<<=1;
+    if(crc & 0x1000000) crc^=0x1864cfb;
+   }       
+ }
+ return String.fromCharCode((crc>>16)&255)
+        +String.fromCharCode((crc>>8)&255)
+        +String.fromCharCode(crc&255);
+}
+
+// --------------------------------------
+// GPG CFB symmetric encryption using AES
+
+var symAlg = 7;          // AES=7, AES192=8, AES256=9
+var kSize  = [16,24,32]  // key length in bytes
+var bpbl   = 16;         // bytes per data block
+
+function GPGencrypt(key, text)
+{
+ var i, n;
+ var len = text.length;
+ var lsk = key.length;
+ var iblock = new Array(bpbl)
+ var rblock = new Array(bpbl);
+ var ct = new Array(bpbl+2);
+ var expandedKey = new Array();
+ 
+ var ciphertext = '';
+
+ // append zero padding
+ if(len%bpbl)
+ {
+  for(i=(len%bpbl); i<bpbl; i++) text+='\0';
+ }
+ 
+ expandedKey = keyExpansion(key);
+
+ // set up initialisation vector and random byte vector
+ for(i=0; i<bpbl; i++)
+ {
+  iblock[i] = 0;
+  rblock[i] = randomByte();
+ }
+
+ iblock = AESencrypt(iblock, expandedKey);
+ for(i=0; i<bpbl; i++)
+ {
+  ct[i] = (iblock[i] ^= rblock[i]);
+ }
+
+ iblock = AESencrypt(iblock, expandedKey);
+ // append check octets
+ ct[bpbl]   = (iblock[0] ^ rblock[bpbl-2]);
+ ct[bpbl+1] = (iblock[1] ^ rblock[bpbl-1]);
+ 
+ for(i = 0; i < bpbl+2; i++) ciphertext += String.fromCharCode(ct[i]);
+
+ // resync
+ iblock = ct.slice(2, bpbl+2);
+
+ for(n = 0; n < text.length; n+=bpbl)
+ {
+  iblock = AESencrypt(iblock, expandedKey);
+  for(i = 0; i < bpbl; i++)
+  {
+   iblock[i] ^= text.charCodeAt(n+i);
+   ciphertext += String.fromCharCode(iblock[i]);
+  }
+ }
+ return ciphertext.substr(0,len+bpbl+2);
+}
+
+// ------------------------------
+// GPG packet header (old format)
+
+function GPGpkt(tag, len)
+{
+ if(len>255) tag +=1;
+ var h = String.fromCharCode(tag);
+ if(len>255) h+=String.fromCharCode(len/256);
+ h += String.fromCharCode(len%256);
+ return h;
+}
+
+// ----------------------------------------------
+// GPG public key encryted session key packet (1)
+
+var el = [3,5,9,17,513,1025,2049,4097];
+
+function GPGpkesk(keyId, keytyp, symAlgo, sessionkey, pkey)
+{ 
+ var mod=new Array();
+ var exp=new Array();
+ var enc='';
+ 
+ var s = r2s(pkey);
+ var l = Math.floor((s.charCodeAt(0)*256 + s.charCodeAt(1)+7)/8);
+
+ mod = mpi2b(s.substr(0,l+2));
+
+ if(keytyp)
+ {
+  var grp=new Array();
+  var y  =new Array();
+  var B  =new Array();
+  var C  =new Array();
+
+  var l2 = Math.floor((s.charCodeAt(l+2)*256 + s.charCodeAt(l+3)+7)/8)+2;
+
+  grp = mpi2b(s.substr(l+2,l2));
+  y   = mpi2b(s.substr(l+2+l2));
+  exp[0] = el[randomByte()&7];
+  B = bmodexp(grp,exp,mod);
+  C = bmodexp(y,exp,mod);
+ }
+ else
+ {
+  exp = mpi2b(s.substr(l+2));
+ }
+
+ var lsk = sessionkey.length;
+
+ // calculate checksum of session key
+ var c = 0;
+ for(var i = 0; i < lsk; i++) c += sessionkey.charCodeAt(i);
+ c &= 0xffff;
+
+ // create MPI from session key using PKCS-1 block type 02
+ var lm = (l-2)*8+2;
+ var m = String.fromCharCode(lm/256)+String.fromCharCode(lm%256)
+   +String.fromCharCode(2)         // skip leading 0 for MPI
+   +randomString(l-lsk-6,1)+'\0'   // add random padding (non-zero)
+   +String.fromCharCode(symAlgo)+sessionkey
+   +String.fromCharCode(c/256)+String.fromCharCode(c&255);
+
+ if(keytyp)
+ {
+  // add Elgamal encrypted mpi values
+   enc = b2mpi(B)+b2mpi(bmod(bmul(mpi2b(m),C),mod));
+
+  return GPGpkt(0x84,enc.length+10)
+   +String.fromCharCode(3)+keyId+String.fromCharCode(16)+enc;
+ }
+ else
+ {
+  // rsa encrypt the result and convert into mpi
+  enc = b2mpi(bmodexp(mpi2b(m),exp,mod));
+
+  return GPGpkt(0x84,enc.length+10)
+   +String.fromCharCode(3)+keyId+String.fromCharCode(1)+enc;
+ }
+}
+
+// ------------------------------------------
+// GPG literal data packet (11) for text file
+
+function GPGld(text)
+{
+ if(text.indexOf('\r\n') == -1)
+   text = text.replace(/\n/g,'\r\n');
+ return GPGpkt(0xAC,text.length+10)+'t'
+   +String.fromCharCode(4)+'file\0\0\0\0'+text;
+}
+
+// -------------------------------------------
+// GPG symmetrically encrypted data packet (9)
+
+function GPGsed(key, text)
+{
+ var enc = GPGencrypt(key, GPGld(text));
+ return GPGpkt(0xA4,enc.length)+enc;
+}
+
+// ------------------------------------------------
+
+function doEncrypt(keyId,keytyp,pkey,text)
+{
+ var keylen = kSize[symAlg-7];  // session key length in bytes
+
+ var sesskey = randomString(keylen,0);
+ keyId = hex2s(keyId);
+ var cp = GPGpkesk(keyId,keytyp,symAlg,sesskey,pkey)+GPGsed(sesskey,text);
+
+ return '\n\n-----BEGIN PGP MESSAGE-----\nVersion: haneWIN JavascriptPG v2.0 w/ wp2pgpmail\n\n'
+        +s2r(cp)+'\n='+s2r(crc24(cp))+'\n-----END PGP MESSAGE-----\n\n';
+}
diff --git a/wp-content/plugins/wp2pgpmail/js/PGpubkey.js b/wp-content/plugins/wp2pgpmail/js/PGpubkey.js
new file mode 100644
index 0000000000000000000000000000000000000000..831254622a514c846188a84ff13ed2ebe30cede3
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/PGpubkey.js
@@ -0,0 +1,185 @@
+
+/* OpenPGP public key extraction
+ * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de
+ * version 1.0, check www.haneWIN.de for the latest version
+
+ * This software is provided as-is, without express or implied warranty.  
+ * Permission to use, copy, modify, distribute or sell this software, with or
+ * without fee, for any purpose and by any individual or organization, is hereby
+ * granted, provided that the above copyright notice and this paragraph appear 
+ * in all copies. Distribution as a part of an application or binary must
+ * include the above copyright notice in the documentation and/or other materials
+ * provided with the application or distribution.
+ */
+
+function s2hex(s)
+{
+  var result = '';
+  for(var i=0; i<s.length; i++)
+  {
+    c = s.charCodeAt(i);
+    result += ((c<16) ? "0" : "") + c.toString(16);
+  }
+  return result;
+}
+
+function getPublicKey(text)
+{
+  var reg = new RegExp("Comment:.{0,}(\r\n|\r|\n)", "g");
+  text = text.replace(reg, "");
+  
+  var found = 0;
+  var i= text.indexOf('-----BEGIN PGP PUBLIC KEY BLOCK-----');
+
+  if(i == -1)
+  {
+    alert('No PGP Public Key Block');
+    this.vers = '';
+    this.fp = '';
+    this.keyid = '';
+    this.user = '';
+    this.pkey = '';
+    return;
+  }
+ 
+  var a=text.indexOf('\n',i);
+  if(a>0) a = text.indexOf('\n', a+1);
+
+  var e=text.indexOf('\n=',i); 
+  if(a>0 && e>0) text = text.slice(a+2,e); 
+  else
+  {
+    alert('Invalid PGP Public Key Block');
+    this.vers = '';
+    this.fp = '';
+    this.keyid = '';
+    this.user = '';
+    this.pkey = '';
+    return;
+  }
+ 
+  var s=r2s(text);
+
+  for(var i=0; i < s.length;)
+  {
+    var tag = s.charCodeAt(i++);
+
+    if((tag&128) == 0) break;
+
+    if(tag&64)
+    {
+      tag&=63;
+      len=s.charCodeAt(i++);
+      if(len >191 && len <224) len=((len-192)<<8) + s.charCodeAt(i++);
+      else if(len==255) len = (s.charCodeAt(i++)<<24) + (s.charCodeAt(i++)<<16) + (s.charCodeAt(i++)<<8) + s.charCodeAt(i++);
+      else if(len>223 &&len<255) len = (1<<(len&0x1f)); 
+    }
+    else
+    {
+      len = tag&3;
+      tag = (tag>>2)&15;
+      if(len==0) len = s.charCodeAt(i++);
+      else if(len==1) len = (s.charCodeAt(i++)<<8) + s.charCodeAt(i++);
+      else if(len==2) len = (s.charCodeAt(i++)<<24) + (s.charCodeAt(i++)<<16) + (s.charCodeAt(i++)<<8) + s.charCodeAt(i++);
+      else len = s.length-1;
+    }
+
+    if(tag==6 || tag==14)  //  public key/subkey packet
+    {
+      var k = i;
+      var vers=s.charCodeAt(i++);
+
+      found = 1;
+      this.vers=vers;
+
+      var time=(s.charCodeAt(i++)<<24) + (s.charCodeAt(i++)<<16) + (s.charCodeAt(i++)<<8) + s.charCodeAt(i++);
+      
+      if(vers==2 || vers==3) var valid=s.charCodeAt(i++)<<8 + s.charCodeAt(i++);
+
+      var algo=s.charCodeAt(i++);
+
+      if(algo == 1 || algo == 2)
+      {
+        var m = i;
+        var lm = Math.floor((s.charCodeAt(i)*256 + s.charCodeAt(i+1)+7)/8);
+        i+=lm+2;
+
+        var mod = s.substr(m,lm+2);
+        var le = Math.floor((s.charCodeAt(i)*256 + s.charCodeAt(i+1)+7)/8);
+        i+=le+2;
+
+        this.pkey=s2r(s.substr(m,lm+le+4));
+        this.type="RSA";
+
+        if(vers==3)
+        {
+           this.fp='';
+           this.keyid=s2hex(mod.substr(mod.length-8, 8));
+        }
+        else if(vers==4)
+        {
+          var pkt = String.fromCharCode(0x99) + String.fromCharCode(len>>8) 
+                    + String.fromCharCode(len&255)+s.substr(k, len);
+          var fp = str_sha1(pkt);
+          this.fp=s2hex(fp);
+          this.keyid=s2hex(fp.substr(fp.length-8,8));
+        }
+        else
+        {
+          this.fp='';
+          this.keyid='';
+        }
+        found = 2;
+      }
+      else if((algo == 16 || algo == 20) && vers == 4)
+      {
+        var m = i;
+
+        var lp = Math.floor((s.charCodeAt(i)*256 + s.charCodeAt(i+1)+7)/8);
+        i+=lp+2;
+
+        var lg = Math.floor((s.charCodeAt(i)*256 + s.charCodeAt(i+1)+7)/8);
+        i+=lg+2;
+
+        var ly = Math.floor((s.charCodeAt(i)*256 + s.charCodeAt(i+1)+7)/8);
+        i+=ly+2;
+
+        this.pkey=s2r(s.substr(m,lp+lg+ly+6));
+
+        var pkt = String.fromCharCode(0x99) + String.fromCharCode(len>>8) 
+                    + String.fromCharCode(len&255)+s.substr(k, len);
+        var fp = str_sha1(pkt);
+        this.fp=s2hex(fp);
+        this.keyid=s2hex(fp.substr(fp.length-8,8));
+        this.type="ELGAMAL";
+        found = 3;
+      } 
+      else
+      {
+        i = k + len;
+      }
+    }
+    else if(tag==13)   // user id
+    {
+      this.user=s.substr(i,len);
+      i+=len;
+    }
+    else
+    {
+      i+=len;
+    }
+  }
+  if(found < 2)
+  {  
+      this.vers = '';
+      this.fp = '';
+      this.keyid = '';
+      if(found == 0)
+          this.user = "No public key packet found."; 
+      else if(found == 1)
+      {
+          this.user = "public key algorithm is " + algo + " not RSA or ELGAMAL.";
+      }
+      this.pkey = "";
+  }
+}
diff --git a/wp-content/plugins/wp2pgpmail/js/aes-enc.js b/wp-content/plugins/wp2pgpmail/js/aes-enc.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e78c9f2c5b4fd5c9fe4094b2a3609f64e44567d
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/aes-enc.js
@@ -0,0 +1,480 @@
+
+/* Rijndael (AES) Encryption
+ * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de
+ * version 1.0, check www.haneWIN.de for the latest version
+
+ * This software is provided as-is, without express or implied warranty.  
+ * Permission to use, copy, modify, distribute or sell this software, with or
+ * without fee, for any purpose and by any individual or organization, is hereby
+ * granted, provided that the above copyright notice and this paragraph appear 
+ * in all copies. Distribution as a part of an application or binary must
+ * include the above copyright notice in the documentation and/or other materials
+ * provided with the application or distribution.
+ */
+
+// The round constants used in subkey expansion
+var Rcon = [ 
+0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 
+0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 
+0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ];
+
+// Precomputed lookup table for the SBox
+var S = [
+ 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 
+118, 202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 
+114, 192, 183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 
+216,  49,  21,   4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 
+235,  39, 178, 117,   9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 
+179,  41, 227,  47, 132,  83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 
+190,  57,  74,  76,  88, 207, 208, 239, 170, 251,  67,  77,  51, 133,  69, 
+249,   2, 127,  80,  60, 159, 168,  81, 163,  64, 143, 146, 157,  56, 245, 
+188, 182, 218,  33,  16, 255, 243, 210, 205,  12,  19, 236,  95, 151,  68,  
+23,  196, 167, 126,  61, 100,  93,  25, 115,  96, 129,  79, 220,  34,  42, 
+144, 136,  70, 238, 184,  20, 222,  94,  11, 219, 224,  50,  58,  10,  73,
+  6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121, 231, 200,  55, 109, 
+141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8, 186, 120,  37,  
+ 46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138, 112,  62, 
+181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158, 225,
+248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
+140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  
+ 22 ];
+
+var T1 = [
+0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
+0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
+0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
+0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
+0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
+0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
+0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
+0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
+0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
+0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
+0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
+0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
+0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
+0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
+0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
+0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
+0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
+0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
+0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
+0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
+0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
+0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
+0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
+0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
+0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
+0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
+0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
+0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
+0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
+0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
+0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
+0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
+0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
+0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
+0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
+0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
+0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
+0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
+0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
+0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
+0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
+0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
+0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
+0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
+0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
+0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
+0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
+0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
+0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
+0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
+0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
+0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
+0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
+0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
+0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
+0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
+0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
+0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
+0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
+0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
+0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
+0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
+0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
+0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c ];
+
+var T2 = [
+0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
+0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
+0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
+0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
+0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
+0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
+0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
+0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
+0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
+0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
+0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
+0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
+0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
+0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
+0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
+0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
+0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
+0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
+0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
+0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
+0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
+0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
+0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
+0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
+0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
+0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
+0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
+0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
+0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
+0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
+0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
+0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
+0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
+0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
+0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
+0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
+0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
+0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
+0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
+0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
+0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
+0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
+0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
+0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
+0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
+0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
+0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
+0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
+0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
+0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
+0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
+0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
+0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
+0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
+0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
+0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
+0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
+0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
+0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
+0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
+0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
+0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
+0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
+0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a ];
+
+var T3 = [
+0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
+0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
+0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
+0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
+0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
+0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
+0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
+0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
+0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
+0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
+0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
+0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
+0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
+0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
+0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
+0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
+0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
+0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
+0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
+0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
+0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
+0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
+0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
+0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
+0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
+0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
+0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
+0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
+0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
+0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
+0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
+0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
+0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
+0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
+0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
+0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
+0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
+0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
+0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
+0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
+0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
+0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
+0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
+0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
+0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
+0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
+0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
+0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
+0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
+0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
+0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
+0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
+0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
+0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
+0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
+0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
+0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
+0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
+0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
+0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
+0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
+0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
+0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
+0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16 ];
+
+var T4 = [
+0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
+0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
+0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
+0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
+0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
+0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
+0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
+0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
+0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
+0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
+0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
+0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
+0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
+0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
+0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
+0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
+0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
+0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
+0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
+0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
+0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
+0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
+0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
+0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
+0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
+0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
+0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
+0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
+0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
+0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
+0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
+0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
+0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
+0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
+0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
+0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
+0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
+0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
+0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
+0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
+0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
+0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
+0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
+0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
+0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
+0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
+0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
+0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
+0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
+0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
+0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
+0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
+0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
+0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
+0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
+0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
+0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
+0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
+0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
+0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
+0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
+0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
+0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
+0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 ];
+
+function B0(x) { return (x&255); }
+function B1(x) { return ((x>>8)&255); }
+function B2(x) { return ((x>>16)&255); }
+function B3(x) { return ((x>>24)&255); }
+
+function packBytes(octets)
+{
+  var i, j;
+  var len=octets.length;
+  var b=new Array(len/4);
+
+  if (!octets || len % 4) return;
+
+  for (i=0, j=0; j<len; j+= 4)
+     b[i++] = octets[j] | (octets[j+1]<<8) | (octets[j+2]<<16) | (octets[j+3]<<24);
+
+  return b;  
+}
+
+function unpackBytes(packed)
+{
+  var j;
+  var i=0, l = packed.length;
+  var r = new Array(l*4);
+
+  for (j=0; j<l; j++)
+  {
+    r[i++] = B0(packed[j]);
+    r[i++] = B1(packed[j]);
+    r[i++] = B2(packed[j]);
+    r[i++] = B3(packed[j]);
+  }
+  return r;
+}
+
+// ------------------------------------------------
+
+var maxkc=8;
+var maxrk=14;
+
+function keyExpansion(key)
+{
+  var kc, i, j, r, t;
+  var rounds;
+  var keySched=new Array(maxrk+1);
+  var keylen=key.length;
+  var k=new Array(maxkc);
+  var tk=new Array(maxkc);
+  var rconpointer=0;
+
+  if(keylen==16)
+  {
+   rounds=10;
+   kc=4;
+  }
+  else if(keylen==24)
+  {
+   rounds=12;
+   kc=6
+  }
+  else if(keylen==32)
+  {
+   rounds=14;
+   kc=8
+  }
+  else
+  {
+   alert('Invalid key length '+keylen);
+   return;
+  }
+
+  for(i=0; i<maxrk+1; i++) keySched[i]=new Array(4);
+
+  for(i=0,j=0; j<keylen; j++,i+=4)
+    k[j] = key.charCodeAt(i) | (key.charCodeAt(i+1)<<8)
+                     | (key.charCodeAt(i+2)<<16) | (key.charCodeAt(i+3)<<24);
+
+  for(j=kc-1; j>=0; j--) tk[j] = k[j];
+
+  r=0;
+  t=0;
+  for(j=0; (j<kc)&&(r<rounds+1); )
+  {
+    for(; (j<kc)&&(t<4); j++,t++)
+    {
+      keySched[r][t]=tk[j];
+    }
+    if(t==4)
+    {
+      r++;
+      t=0;
+    }
+  }
+
+  while(r<rounds+1)
+  {
+    var temp = tk[kc-1];
+
+    tk[0] ^= S[B1(temp)] | (S[B2(temp)]<<8) | (S[B3(temp)]<<16) | (S[B0(temp)]<<24);
+    tk[0] ^= Rcon[rconpointer++];
+
+    if(kc != 8)
+    {
+      for(j=1; j<kc; j++) tk[j] ^= tk[j-1];
+    }
+    else
+    {
+      for(j=1; j<kc/2; j++) tk[j] ^= tk[j-1];
+ 
+      temp = tk[kc/2-1];
+      tk[kc/2] ^= S[B0(temp)] | (S[B1(temp)]<<8) | (S[B2(temp)]<<16) | (S[B3(temp)]<<24);
+
+      for(j=kc/2+1; j<kc; j++) tk[j] ^= tk[j-1];
+    }
+
+    for(j=0; (j<kc)&&(r<rounds+1); )
+    {
+      for(; (j<kc)&&(t<4); j++,t++)
+      {
+        keySched[r][t]=tk[j];
+      }
+      if(t==4)
+      {
+        r++;
+        t=0;
+      }
+    }
+  }
+  this.rounds = rounds;
+  this.rk = keySched;
+  return this;
+}
+
+function AESencrypt(block, ctx)
+{
+  var r;
+  var temp=new Array(4);
+
+  var b = packBytes(block);
+  var rounds = ctx.rounds;
+
+  for(r=0; r<rounds-1; r++)
+  {
+    temp[0] = b[0] ^ ctx.rk[r][0];
+    temp[1] = b[1] ^ ctx.rk[r][1];
+    temp[2] = b[2] ^ ctx.rk[r][2];
+    temp[3] = b[3] ^ ctx.rk[r][3];
+
+    b[0] = T1[B0(temp[0])] ^ T2[B1(temp[1])] ^ T3[B2(temp[2])] ^ T4[B3(temp[3])];
+    b[1] = T1[B0(temp[1])] ^ T2[B1(temp[2])] ^ T3[B2(temp[3])] ^ T4[B3(temp[0])];
+    b[2] = T1[B0(temp[2])] ^ T2[B1(temp[3])] ^ T3[B2(temp[0])] ^ T4[B3(temp[1])];
+    b[3] = T1[B0(temp[3])] ^ T2[B1(temp[0])] ^ T3[B2(temp[1])] ^ T4[B3(temp[2])];
+  }
+
+  // last round is special
+  r = rounds-1;
+
+  temp[0] = b[0] ^ ctx.rk[r][0];
+  temp[1] = b[1] ^ ctx.rk[r][1];
+  temp[2] = b[2] ^ ctx.rk[r][2];
+  temp[3] = b[3] ^ ctx.rk[r][3];
+
+  b[0] = B1(T1[B0(temp[0])]) | (B1(T1[B1(temp[1])])<<8) | (B1(T1[B2(temp[2])])<<16) | (B1(T1[B3(temp[3])])<<24);
+  b[1] = B1(T1[B0(temp[1])]) | (B1(T1[B1(temp[2])])<<8) | (B1(T1[B2(temp[3])])<<16) | (B1(T1[B3(temp[0])])<<24);
+  b[2] = B1(T1[B0(temp[2])]) | (B1(T1[B1(temp[3])])<<8) | (B1(T1[B2(temp[0])])<<16) | (B1(T1[B3(temp[1])])<<24);
+  b[3] = B1(T1[B0(temp[3])]) | (B1(T1[B1(temp[0])])<<8) | (B1(T1[B2(temp[1])])<<16) | (B1(T1[B3(temp[2])])<<24);
+  
+  b[0] ^= ctx.rk[rounds][0];
+  b[1] ^= ctx.rk[rounds][1];
+  b[2] ^= ctx.rk[rounds][2];
+  b[3] ^= ctx.rk[rounds][3];
+
+  return unpackBytes(b);
+}
+
diff --git a/wp-content/plugins/wp2pgpmail/js/base64.js b/wp-content/plugins/wp2pgpmail/js/base64.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff09d698fab7c64f590d90254584a845f4d49baf
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/base64.js
@@ -0,0 +1,83 @@
+
+/* OpenPGP radix-64/base64 string encoding/decoding
+ * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de
+ * version 1.0, check www.haneWIN.de for the latest version
+
+ * This software is provided as-is, without express or implied warranty.  
+ * Permission to use, copy, modify, distribute or sell this software, with or
+ * without fee, for any purpose and by any individual or organization, is hereby
+ * granted, provided that the above copyright notice and this paragraph appear 
+ * in all copies. Distribution as a part of an application or binary must
+ * include the above copyright notice in the documentation and/or other materials
+ * provided with the application or distribution.
+ */
+
+var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+
+function s2r(t)
+{
+ var a, c, n;
+ var r='', l=0, s=0;
+ var tl=t.length;
+
+ for(n=0; n<tl; n++)
+ {
+  c=t.charCodeAt(n);
+  if(s == 0)
+  {
+   r+=b64s.charAt((c>>2)&63);
+   a=(c&3)<<4;
+  }
+  else if(s==1)
+  {
+   r+=b64s.charAt((a|(c>>4)&15));
+   a=(c&15)<<2;
+  }
+  else if(s==2)
+  {
+   r+=b64s.charAt(a|((c>>6)&3));
+   l+=1;
+   if((l%60)==0) r+="\n";
+   r+=b64s.charAt(c&63);
+  }
+  l+=1;
+  if((l%60)==0) r+="\n";
+
+  s+=1;
+  if(s==3) s=0;  
+ }
+ if(s>0)
+ {
+  r+=b64s.charAt(a);
+  l+=1;
+  if((l%60)==0) r+="\n";
+  r+='=';
+  l+=1;
+ }
+ if(s==1)
+ {
+  if((l%60)==0) r+="\n";
+  r+='=';
+ }
+
+ return r;
+}
+
+function r2s(t)
+{
+ var c, n;
+ var r='', s=0, a=0;
+ var tl=t.length;
+
+ for(n=0; n<tl; n++)
+ {
+  c=b64s.indexOf(t.charAt(n));
+  if(c >= 0)
+  {
+   if(s) r+=String.fromCharCode(a | (c>>(6-s))&255);
+   s=(s+2)&7;
+   a=(c<<s)&255;
+  }
+ }
+ return r;
+}
diff --git a/wp-content/plugins/wp2pgpmail/js/index.php b/wp-content/plugins/wp2pgpmail/js/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/js/mouse.js b/wp-content/plugins/wp2pgpmail/js/mouse.js
new file mode 100644
index 0000000000000000000000000000000000000000..2245d27c8c12d3994ad96784e6f2107a2d122806
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/mouse.js
@@ -0,0 +1,144 @@
+    
+/* Collect entropy from mouse motion and key press events
+ * Note that this is coded to work with either DOM2 or Internet Explorer
+ * style events.
+ * We don't use every successive mouse movement event.
+ * Instead, we use some bits from random() to determine how many
+ * subsequent mouse movements we ignore before capturing the next one.
+ * rc4 is used as a mixing function for the captured mouse events.  
+ *
+ * mouse motion event code originally from John Walker
+ * key press timing code thanks to Nigel Johnstone
+ */
+
+var oldKeyHandler;    // For saving and restoring key press handler in IE4
+var keyRead = 0;
+var keyNext = 0;
+var keyArray = new Array(256);
+	
+var mouseMoveSkip = 0; // Delay counter for mouse entropy collection
+var oldMoveHandler;    // For saving and restoring mouse move handler in IE4
+var mouseRead = 0;
+var mouseNext = 0;
+var mouseArray = new Array(256);
+
+// ----------------------------------------
+
+var s=new Array(256);
+var x, y;
+
+function rc4Init()
+{
+ var i, t;
+ var key = new Array(256);
+
+ for(i=0; i<256; i++)
+ {
+  s[i]=i;
+  key[i] = randomByte()^timeByte();
+ }
+
+ y=0;
+ for(i=0; i<2; i++)
+ {
+  for(x=0; x<256; x++)
+  {
+   y=(key[i] + s[x] + y) % 256;
+   t=s[x]; s[x]=s[y]; s[y]=t;
+  }
+ }
+ x=0;
+ y=0;
+}
+
+function rc4Next(b)
+{
+ var t, x2;
+
+ x=(x+1) & 255; 
+ y=(s[x] + y) & 255;
+ t=s[x]; s[x]=s[y]; s[y]=t;
+ return (b ^ s[(s[x] + s[y]) % 256]) & 255; 
+}
+
+// ----------------------------------------
+    
+function keyByte() { return keyArray[(keyRead++)%keyNext]; }
+function keyPressEntropy(e) { keyArray[(keyNext++)%256] ^= timeByte(); }
+
+function mouseByte() { return mouseArray[(mouseRead++)%mouseNext]; }
+function mouseMoveEntropy(e)
+{
+ var c;
+
+ if (!e) { e = window.event; }	    // Internet Explorer event model
+
+ if(mouseMoveSkip-- <= 0)
+ {
+  if(oldMoveHandler) { c = ((e.clientX << 4) | (e.clientY & 15)); }
+  else { c = ((e.screenX << 4) | (e.screenY & 15)); }
+
+  mouseArray[(mouseNext++)%256] ^= rc4Next(c&255);
+  mouseArray[(mouseNext++)%256] ^= rc4Next(timeByte());
+  mouseMoveSkip = randomByte() & 7;
+ }
+}
+
+// ----------------------------------------
+
+function eventsEnd()
+{
+ if(document.removeEventListener)
+ {
+  document.removeEventListener("mousemove", mouseMoveEntropy, false);
+  document.removeEventListener("keypress", keyPressEntropy, false);
+ }
+ else if(document.detachEvent)
+ {
+  document.detachEvent("onmousemove", mouseMoveEntropy);
+  document.detachEvent("onkeypress", keyPressEntropy);
+ }
+ else if(document.releaseEvents)
+ {
+  document.releaseEvents(EVENT.MOUSEMOVE); document.onMousemove = 0;
+  document.releaseEvents(EVENT.KEYPRESS); document.onKeypress = 0;
+ }
+ else
+ {
+  document.onMousemove = oldMoveHandler;
+  document.onKeypress = oldKeyHandler;
+ }
+}
+
+// Start collection of entropy.
+	
+function eventsCollect()
+{
+ if((document.implementation.hasFeature("Events", "2.0"))
+  && document.addEventListener) // Document Object Model (DOM) 2 events
+ {
+  document.addEventListener("mousemove", mouseMoveEntropy, false);
+  document.addEventListener("keypress", keyPressEntropy, false);
+ }
+ else if(document.attachEvent) // IE 5 and above event model
+ {
+  document.attachEvent("onmousemove", mouseMoveEntropy);
+  document.attachEvent("onkeypress", keyPressEntropy);
+ }
+ else if(document.captureEvents) // Netscape 4.0
+ {
+  document.captureEvents(Event.MOUSEMOVE);
+  document.onMousemove = mouseMoveEntropy;
+  document.captureEvents(Event.KEYPRESS);
+  document.onMousemove = keyPressEntropy;
+ }
+ else // IE 4 event model
+ {
+  oldMoveHandler = document.onmousemove;
+  document.onMousemove = mouseMoveEntropy;
+  oldKeyHandler = document.onkeypress;
+  document.onKeypress = keyPressEntropy;
+ }
+
+ rc4Init();
+}
diff --git a/wp-content/plugins/wp2pgpmail/js/rsa.js b/wp-content/plugins/wp2pgpmail/js/rsa.js
new file mode 100644
index 0000000000000000000000000000000000000000..add81f723c77f1d26e2653b95e42ee567e074f36
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/rsa.js
@@ -0,0 +1,394 @@
+
+/* RSA public key encryption/decryption
+ * The following functions are (c) 2000 by John M Hanna and are
+ * released under the terms of the Gnu Public License.
+ * You must freely redistribute them with their source -- see the
+ * GPL for details.
+ *  -- Latest version found at http://sourceforge.net/projects/shop-js
+ *
+ * GnuPG multi precision integer (mpi) conversion added
+ * 2004 by Herbert Hanewinkel, www.haneWIN.de
+ */
+
+// --- Arbitrary Precision Math ---
+// badd(a,b), bsub(a,b), bmul(a,b)
+// bdiv(a,b), bmod(a,b), bmodexp(xx,y,m)
+
+// set the base... 32bit cpu -> bs=16, 64bit -> bs=32
+// bs is the shift, bm is the mask
+
+var bs=28;
+var bx2=1<<bs, bm=bx2-1, bx=bx2>>1, bd=bs>>1, bdm=(1<<bd)-1;
+
+var log2=Math.log(2);
+
+function badd(a,b) // binary add
+{
+ var al=a.length, bl=b.length;
+
+ if(al < bl) return badd(b,a);
+
+ var r=new Array(al);
+ var c=0, n=0;
+
+ for(; n<bl; n++)
+ {
+  c+=a[n]+b[n];
+  r[n]=c & bm;
+  c>>>=bs;
+ }
+ for(; n<al; n++)
+ {
+  c+=a[n];
+  r[n]=c & bm;
+  c>>>=bs;
+ }
+ if(c) r[n]=c;
+ return r;
+}
+
+function bsub(a,b) // binary subtract
+{
+ var al=a.length, bl=b.length;
+
+ if(bl > al) return [];
+ if(bl == al)
+ {
+  if(b[bl-1] > a[bl-1]) return [];
+  if(bl==1) return [a[0]-b[0]];
+ }
+
+ var r=new Array(al);
+ var c=0;
+
+ for(var n=0; n<bl; n++)
+ {
+  c+=a[n]-b[n];
+  r[n]=c & bm;
+  c>>=bs;
+ }
+ for(;n<al; n++)
+ {
+  c+=a[n];
+  r[n]=c & bm;
+  c>>=bs;
+ }
+ if(c) return [];
+
+ if(r[n-1]) return r;
+ while(n>1 && r[n-1]==0) n--;
+ return r.slice(0,n);
+}
+
+function zeros(n)
+{
+ var r=new Array(n);
+
+ while(n-->0) r[n]=0;
+ return r;
+}
+
+function bmul(a,b) // binary multiply
+{
+ b=b.concat([0]);
+ var al=a.length, bl=b.length;
+ var n,nn,aa,c,m, g,gg,h,hh,ghh,ghhb;
+
+ var r=zeros(al+bl+1);
+
+ for(n=0; n<al; n++)
+ {
+  aa=a[n];
+  if(aa)
+  {
+   c=0;
+   hh=aa>>bd; h=aa & bdm;
+   m=n;
+   for(nn=0; nn<bl; nn++, m++)
+   {
+    g = b[nn]; gg=g>>bd; g=g & bdm;
+    // (gg*2^15 + g) * (hh*2^15 + h) = (gghh*2^30 + (ghh+hgg)*2^15 +hg)
+    ghh = g * hh + h * gg;
+    ghhb= ghh >> bd; ghh &= bdm;
+    c += r[m] + h * g + (ghh << bd);
+    r[m] = c & bm;
+    c = (c >> bs) + gg * hh + ghhb;
+   }
+  }
+ }
+ n=r.length;
+
+ if(r[n-1]) return r;
+ while(n>1 && r[n-1]==0) n--;
+ return r.slice(0,n);
+}
+
+function toppart(x,start,len)
+{
+ var n=0;
+ while(start >= 0 && len-->0) n=n*bx2+x[start--];
+ return n;
+}
+
+// ----------------------------------------------------
+// 14.20 Algorithm Multiple-precision division from HAC
+
+function bdiv(x,y)
+{
+ var n=x.length-1, t=y.length-1, nmt=n-t;
+
+ // trivial cases; x < y
+ if(n < t || n==t && (x[n]<y[n] || n>0 && x[n]==y[n] && x[n-1]<y[n-1]))
+ {
+  this.q=[0]; this.mod=x;
+  return this;
+ }
+
+ // trivial cases; q < 4
+ if(n==t && toppart(x,t,2)/toppart(y,t,2) <4)
+ {
+  var qq=0, xx;
+  for(;;)
+  {
+   xx=bsub(x,y);
+   if(xx.length==0) break;
+   x=xx; qq++;
+  }
+  this.q=[qq]; this.mod=x;
+  return this;
+ }
+
+ var shift, shift2
+ // normalize
+ shift2=Math.floor(Math.log(y[t])/log2)+1;
+ shift=bs-shift2;
+ if(shift)
+ {
+  x=x.concat(); y=y.concat()
+  for(i=t; i>0; i--) y[i]=((y[i]<<shift) & bm) | (y[i-1] >> shift2);
+  y[0]=(y[0]<<shift) & bm;
+  if(x[n] & ((bm <<shift2) & bm))
+  {
+   x[++n]=0; nmt++;
+  }
+  for(i=n; i>0; i--) x[i]=((x[i]<<shift) & bm) | (x[i-1] >> shift2);
+  x[0]=(x[0]<<shift) & bm;
+ }
+
+ var i, j, x2;
+ var q=zeros(nmt+1);
+ var y2=zeros(nmt).concat(y);
+ for(;;)
+ {
+  x2=bsub(x,y2);
+  if(x2.length==0) break;
+  q[nmt]++;
+  x=x2;
+ }
+
+ var yt=y[t], top=toppart(y,t,2)
+ for(i=n; i>t; i--)
+ {
+  var m=i-t-1;
+  if(i >= x.length) q[m]=1;
+  else if(x[i] == yt) q[m]=bm;
+  else q[m]=Math.floor(toppart(x,i,2)/yt);
+
+  var topx=toppart(x,i,3);
+  while(q[m] * top > topx) q[m]--;
+
+  //x-=q[m]*y*b^m
+  y2=y2.slice(1);
+  x2=bsub(x,bmul([q[m]],y2));
+  if(x2.length==0)
+  {
+   q[m]--;
+   x2=bsub(x,bmul([q[m]],y2));
+  }
+  x=x2;
+ }
+ // de-normalize
+ if(shift)
+ {
+  for(i=0; i<x.length-1; i++) x[i]=(x[i]>>shift) | ((x[i+1] << shift2) & bm);
+  x[x.length-1]>>=shift;
+ }
+ n = q.length;
+ while(n > 1 && q[n-1]==0) n--;
+ this.q=q.slice(0,n);
+ n = x.length;
+ while(n > 1 && x[n-1]==0) n--;
+ this.mod=x.slice(0,n);
+ return this;
+}
+
+function simplemod(i,m) // returns the mod where m < 2^bd
+{
+ var c=0, v;
+ for(var n=i.length-1; n>=0; n--)
+ {
+  v=i[n];
+  c=((v >> bd) + (c<<bd)) % m;
+  c=((v & bdm) + (c<<bd)) % m;
+ }
+ return c;
+}
+
+function bmod(p,m) // binary modulo
+{
+ if(m.length==1)
+ {
+  if(p.length==1) return [p[0] % m[0]];
+  if(m[0] < bdm) return [simplemod(p,m[0])];
+ }
+
+ var r=bdiv(p,m);
+ return r.mod;
+}
+
+// ------------------------------------------------------
+// Barrett's modular reduction from HAC, 14.42, CRC Press
+
+function bmod2(x,m,mu)
+{
+ var xl=x.length - (m.length << 1);
+ if(xl > 0) return bmod2(x.slice(0,xl).concat(bmod2(x.slice(xl),m,mu)),m,mu);
+
+ var ml1=m.length+1, ml2=m.length-1,rr;
+ //var q1=x.slice(ml2)
+ //var q2=bmul(q1,mu)
+ var q3=bmul(x.slice(ml2),mu).slice(ml1);
+ var r1=x.slice(0,ml1);
+ var r2=bmul(q3,m).slice(0,ml1);
+ var r=bsub(r1,r2);
+ //var s=('x='+x+'\nm='+m+'\nmu='+mu+'\nq1='+q1+'\nq2='+q2+'\nq3='+q3+'\nr1='+r1+'\nr2='+r2+'\nr='+r); 
+ if(r.length==0)
+ {
+  r1[ml1]=1;
+  r=bsub(r1,r2);
+ }
+ for(var n=0;;n++)
+ {
+  rr=bsub(r,m);
+  if(rr.length==0) break;
+  r=rr;
+  if(n>=3) return bmod2(r,m,mu);
+ }
+ return r;
+}
+
+function bmodexp(xx,y,m) // binary modular exponentiation
+{
+ var r=[1], an,a, x=xx.concat();
+ var n=m.length*2;
+ var mu=new Array(n+1);
+
+ mu[n--]=1;
+ for(; n>=0; n--) mu[n]=0; mu=bdiv(mu,m).q;
+
+ for(n=0; n<y.length; n++)
+ {
+  for(a=1, an=0; an<bs; an++, a<<=1)
+  {
+   if(y[n] & a) r=bmod2(bmul(r,x),m,mu);
+   x=bmod2(bmul(x,x),m,mu);
+  }
+ }
+ return r;
+}
+
+// -----------------------------------------------------
+// Compute s**e mod m for RSA public key operation
+
+function RSAencrypt(s, e, m) { return bmodexp(s,e,m); }
+
+// Compute m**d mod p*q for RSA private key operations.
+
+function RSAdecrypt(m, d, p, q, u)
+{
+ var xp = bmodexp(bmod(m,p), bmod(d,bsub(p,[1])), p);
+ var xq = bmodexp(bmod(m,q), bmod(d,bsub(q,[1])), q);
+
+ var t=bsub(xq,xp);
+ if(t.length==0)
+ {
+  t=bsub(xp,xq);
+  t=bmod(bmul(t, u), q);
+  t=bsub(q,t);
+ }
+ else
+ {
+  t=bmod(bmul(t, u), q);
+ } 
+ return badd(bmul(t,p), xp);
+}
+
+// -----------------------------------------------------------------
+// conversion functions: num array <-> multi precision integer (mpi)
+// mpi: 2 octets with length in bits + octets in big endian order
+
+function mpi2b(s)
+{
+ var bn=1, r=[0], rn=0, sb=256;
+ var c, sn=s.length;
+ if(sn < 2)
+ {
+    alert('string too short, not a MPI');
+    return 0;
+ }
+
+ var len=(sn-2)*8;
+ var bits=s.charCodeAt(0)*256+s.charCodeAt(1);
+ if(bits > len || bits < len-8) 
+ {
+    alert('not a MPI, bits='+bits+",len="+len);
+    return 0;
+ }
+
+ for(var n=0; n<len; n++)
+ {
+  if((sb<<=1) > 255)
+  {
+   sb=1; c=s.charCodeAt(--sn);
+  }
+  if(bn > bm)
+  {
+   bn=1;
+   r[++rn]=0;
+  }
+  if(c & sb) r[rn]|=bn;
+  bn<<=1;
+ }
+ return r;
+}
+
+function b2mpi(b)
+{
+ var bn=1, bc=0, r=[0], rb=1, rn=0;
+ var bits=b.length*bs;
+ var n, rr='';
+
+ for(n=0; n<bits; n++)
+ {
+  if(b[bc] & bn) r[rn]|=rb;
+  if((rb<<=1) > 255)
+  {
+   rb=1; r[++rn]=0;
+  }
+  if((bn<<=1) > bm)
+  {
+   bn=1; bc++;
+  }
+ }
+
+ while(rn && r[rn]==0) rn--;
+
+ bn=256;
+ for(bits=8; bits>0; bits--) if(r[rn] & (bn>>=1)) break;
+ bits+=rn*8;
+
+ rr+=String.fromCharCode(bits/256)+String.fromCharCode(bits%256);
+ if(bits) for(n=rn; n>=0; n--) rr+=String.fromCharCode(r[n]);
+ return rr;
+}
+
diff --git a/wp-content/plugins/wp2pgpmail/js/sha1.js b/wp-content/plugins/wp2pgpmail/js/sha1.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b38ede7f52b85ff8937396b988d351aa98778e4
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/js/sha1.js
@@ -0,0 +1,202 @@
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
+ * in FIPS PUB 180-1
+ * Version 2.1 Copyright Paul Johnston 2000 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for details.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
+var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
+var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
+function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
+function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
+function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function sha1_vm_test()
+{
+  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+
+/*
+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
+ */
+function core_sha1(x, len)
+{
+  /* append padding */
+  x[len >> 5] |= 0x80 << (24 - len % 32);
+  x[((len + 64 >> 9) << 4) + 15] = len;
+
+  var w = Array(80);
+  var a =  1732584193;
+  var b = -271733879;
+  var c = -1732584194;
+  var d =  271733878;
+  var e = -1009589776;
+
+  for(var i = 0; i < x.length; i += 16)
+  {
+    var olda = a;
+    var oldb = b;
+    var oldc = c;
+    var oldd = d;
+    var olde = e;
+
+    for(var j = 0; j < 80; j++)
+    {
+      if(j < 16) w[j] = x[i + j];
+      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
+      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), 
+                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
+      e = d;
+      d = c;
+      c = rol(b, 30);
+      b = a;
+      a = t;
+    }
+
+    a = safe_add(a, olda);
+    b = safe_add(b, oldb);
+    c = safe_add(c, oldc);
+    d = safe_add(d, oldd);
+    e = safe_add(e, olde);
+  }
+  return Array(a, b, c, d, e);
+  
+}
+
+/*
+ * Perform the appropriate triplet combination function for the current
+ * iteration
+ */
+function sha1_ft(t, b, c, d)
+{
+  if(t < 20) return (b & c) | ((~b) & d);
+  if(t < 40) return b ^ c ^ d;
+  if(t < 60) return (b & c) | (b & d) | (c & d);
+  return b ^ c ^ d;
+}
+
+/*
+ * Determine the appropriate additive constant for the current iteration
+ */
+function sha1_kt(t)
+{
+  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
+         (t < 60) ? -1894007588 : -899497514;
+}  
+
+/*
+ * Calculate the HMAC-SHA1 of a key and some data
+ */
+function core_hmac_sha1(key, data)
+{
+  var bkey = str2binb(key);
+  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
+
+  var ipad = Array(16), opad = Array(16);
+  for(var i = 0; i < 16; i++) 
+  {
+    ipad[i] = bkey[i] ^ 0x36363636;
+    opad[i] = bkey[i] ^ 0x5C5C5C5C;
+  }
+
+  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
+  return core_sha1(opad.concat(hash), 512 + 160);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+  return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt)
+{
+  return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert an 8-bit or 16-bit string to an array of big-endian words
+ * In 8-bit function, characters >255 have their hi-byte silently ignored.
+ */
+function str2binb(str)
+{
+  var bin = Array();
+  var mask = (1 << chrsz) - 1;
+  for(var i = 0; i < str.length * chrsz; i += chrsz)
+    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);
+  return bin;
+}
+
+/*
+ * Convert an array of big-endian words to a string
+ */
+function binb2str(bin)
+{
+  var str = "";
+  var mask = (1 << chrsz) - 1;
+  for(var i = 0; i < bin.length * 32; i += chrsz)
+    str += String.fromCharCode((bin[i>>5] >>> (24 - i%32)) & mask);
+  return str;
+}
+
+/*
+ * Convert an array of big-endian words to a hex string.
+ */
+function binb2hex(binarray)
+{
+  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+  var str = "";
+  for(var i = 0; i < binarray.length * 4; i++)
+  {
+    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
+           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
+  }
+  return str;
+}
+
+/*
+ * Convert an array of big-endian words to a base-64 string
+ */
+function binb2b64(binarray)
+{
+  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+  var str = "";
+  for(var i = 0; i < binarray.length * 4; i += 3)
+  {
+    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
+                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
+                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
+    for(var j = 0; j < 4; j++)
+    {
+      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
+      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
+    }
+  }
+  return str;
+}
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/AHGBold.ttf b/wp-content/plugins/wp2pgpmail/phpcaptcha/AHGBold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..764b23d76ff19a9ea15f8abd10c4725d2ad03b67
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/AHGBold.ttf differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/LICENSE.txt b/wp-content/plugins/wp2pgpmail/phpcaptcha/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9a749e68550b0b8671c3149e475843b918e40e7b
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/LICENSE.txt
@@ -0,0 +1,458 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/README.FONT.txt b/wp-content/plugins/wp2pgpmail/phpcaptcha/README.FONT.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d4770de5a07de7436d3ee4156f307d3daa48f73d
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/README.FONT.txt
@@ -0,0 +1,12 @@
+AHGBold.ttf is used by Securimage under the following license:
+
+Alte Haas Grotesk is a typeface that look like an helvetica printed in an old Muller-Brockmann Book.
+
+These fonts are freeware and can be distributed as long as they are
+together with this text file. 
+
+I would appreciate very much to see what you have done with it anyway.
+
+yann le coroller 
+www.yannlecoroller.com
+yann@lecoroller.com
\ No newline at end of file
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/README.txt b/wp-content/plugins/wp2pgpmail/phpcaptcha/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b608018d4937b9e1f7ded9cab94ece8754d9dd60
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/README.txt
@@ -0,0 +1,88 @@
+NAME:
+
+    Securimage - A PHP class for creating and managing form CAPTCHA images
+
+VERSION: 2.0 BETA
+
+AUTHOR:
+
+    Drew Phillips <drew@drew-phillips.com>
+
+DOWNLOAD:
+
+    The latest version can always be
+    found at http://www.phpcaptcha.org
+
+DOCUMENTATION:
+
+    Online documentation of the class, methods, and variables can
+    be found at http://www.phpcaptcha.org/Securimage_Docs/
+
+REQUIREMENTS:
+    PHP 4.3.0
+    GD  2.0
+    FreeType (recommended, required for TTF support)
+
+SYNOPSIS:
+
+    require_once 'securimage.php';
+
+    $image = new Securimage();
+
+    $image->show();
+
+    // Code Validation
+
+    $image = new Securimage();
+    if ($image->check($_POST['code']) == true) {
+      echo "Correct!";
+    } else {
+      echo "Sorry, wrong code.";
+    }
+
+DESCRIPTION:
+
+    What is Securimage?
+
+    Securimage is a PHP class that is used to generate and validate CAPTCHA images.
+    The classes uses an existing PHP session or creates its own if none is found to store the
+    CAPTCHA code.  Variables within the class are used to control the style and display of the image.
+    The class supports TTF fonts and effects for strengthening the security of the image.
+    If TTF support is not available, GD fonts can be used as well, but certain options such as
+    transparent text and angled letters cannot be used.
+
+
+COPYRIGHT:
+    Copyright (c) 2009 Drew Phillips. All rights reserved.
+    This software is released under the GNU Lesser General Public License.
+
+    -----------------------------------------------------------------------------
+    Flash code created for Securimage by Douglas Walsh (www.douglaswalsh.net)
+    Many thanks for releasing this to the project!
+
+    ------------------------------------------------------------------------------
+    Portions of Securimage contain code from Han-Kwang Nienhuys' PHP captcha
+        
+    Han-Kwang Nienhuys' PHP captcha
+    Copyright June 2007
+    
+    This copyright message and attribution must be preserved upon
+    modification. Redistribution under other licenses is expressly allowed.
+    Other licenses include GPL 2 or higher, BSD, and non-free licenses.
+    The original, unrestricted version can be obtained from
+    http://www.lagom.nl/linux/hkcaptcha/
+    
+    -------------------------------------------------------------------------------
+    AHGBold.ttf (AlteHaasGroteskBold.ttf) font was created by Yann Le Coroller and is distributed as freeware
+    
+    Alte Haas Grotesk is a typeface that look like an helvetica printed in an old Muller-Brockmann Book.
+    
+    These fonts are freeware and can be distributed as long as they are
+    together with this text file. 
+    
+    I would appreciate very much to see what you have done with it anyway.
+    
+    yann le coroller 
+    www.yannlecoroller.com
+    yann@lecoroller.com
+
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg3.jpg b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a2d62d6320d11c71a542023ee3d9d98f55cf9c07
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg3.jpg differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg4.jpg b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg4.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..37a22f88551240a67d68fd7136777c9b0ffbf221
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg4.jpg differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg5.jpg b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg5.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0a04181bf5390b6e5fbb7d9686da394865b7b448
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg5.jpg differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg6.png b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg6.png
new file mode 100644
index 0000000000000000000000000000000000000000..22f9d67fc27ea58d8a6deb1bbbd50ccaaa8f070e
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/bg6.png differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/index.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/backgrounds/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/database/.htaccess b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/.htaccess
new file mode 100644
index 0000000000000000000000000000000000000000..8d2f25636ddd2da5618493bc74e617b0f59bdfc3
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/.htaccess
@@ -0,0 +1 @@
+deny from all
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/database/index.html b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..8d1c8b69c3fce7bea45c73efd06983e3c419a92f
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/index.html
@@ -0,0 +1 @@
+ 
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/database/securimage.sqlite b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/securimage.sqlite
new file mode 100644
index 0000000000000000000000000000000000000000..10e233ddec53831b6d94af55db9c6fa003a320d7
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/database/securimage.sqlite differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/gdfonts/automatic.gdf b/wp-content/plugins/wp2pgpmail/phpcaptcha/gdfonts/automatic.gdf
new file mode 100644
index 0000000000000000000000000000000000000000..3eee7068f3d178d9fcae61543edd388f2090b8a6
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/gdfonts/automatic.gdf differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/gdfonts/index.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/gdfonts/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/images/audio_icon.gif b/wp-content/plugins/wp2pgpmail/phpcaptcha/images/audio_icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..beafd518270f15bd62e15276ede1c5daab7d8892
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/images/audio_icon.gif differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/images/index.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/images/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/images/refresh.gif b/wp-content/plugins/wp2pgpmail/phpcaptcha/images/refresh.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a10b24717f9d5be6af61c1c3dd646f6bf0e99ab9
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/images/refresh.gif differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/index.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebabab0fe81928bb9de92721698506880fc4cd59
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage.php
@@ -0,0 +1,1584 @@
+<?php
+
+/**
+ * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br />
+ * File:        securimage.php<br />
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or any later version.<br /><br />
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.<br /><br />
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<br /><br />
+ *
+ * Any modifications to the library should be indicated clearly in the source code
+ * to inform users that the changes are not a part of the original software.<br /><br />
+ *
+ * If you found this script useful, please take a quick moment to rate it.<br />
+ * http://www.hotscripts.com/rate/49400.html  Thanks.
+ *
+ * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA
+ * @link http://www.phpcaptcha.org/latest.zip Download Latest Version
+ * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation
+ * @copyright 2009 Drew Phillips
+ * @author Drew Phillips <drew@drew-phillips.com>
+ * @version 2.0.1 BETA (December 6th, 2009)
+ * @package Securimage
+ *
+ */
+
+/**
+ ChangeLog
+
+ 2.0.1
+ - Add support for browsers with cookies disabled (requires php5, sqlite) maps users to md5 hashed ip addresses and md5 hashed codes for security
+ - Add fallback to gd fonts if ttf support is not enabled or font file not found (Mike Challis http://www.642weather.com/weather/scripts.php)
+ - Check for previous definition of image type constants (Mike Challis)
+ - Fix mime type settings for audio output
+ - Fixed color allocation issues with multiple colors and background images, consolidate allocation to one function
+ - Ability to let codes expire after a given length of time
+ - Allow HTML color codes to be passed to Securimage_Color (suggested by Mike Challis)
+
+ 2.0.0
+ - Add mathematical distortion to characters (using code from HKCaptcha)
+ - Improved session support
+ - Added Securimage_Color class for easier color definitions
+ - Add distortion to audio output to prevent binary comparison attack (proposed by Sven "SavageTiger" Hagemann [insecurity.nl])
+ - Flash button to stream mp3 audio (Douglas Walsh www.douglaswalsh.net)
+ - Audio output is mp3 format by default
+ - Change font to AlteHaasGrotesk by yann le coroller
+ - Some code cleanup 
+
+ 1.0.4 (unreleased)
+ - Ability to output audible codes in mp3 format to stream from flash
+
+ 1.0.3.1
+ - Error reading from wordlist in some cases caused words to be cut off 1 letter short
+
+ 1.0.3
+ - Removed shadow_text from code which could cause an undefined property error due to removal from previous version
+
+ 1.0.2
+ - Audible CAPTCHA Code wav files
+ - Create codes from a word list instead of random strings
+
+ 1.0
+ - Added the ability to use a selected character set, rather than a-z0-9 only.
+ - Added the multi-color text option to use different colors for each letter.
+ - Switched to automatic session handling instead of using files for code storage
+ - Added GD Font support if ttf support is not available.  Can use internal GD fonts or load new ones.
+ - Added the ability to set line thickness
+ - Added option for drawing arced lines over letters
+ - Added ability to choose image type for output
+
+ */
+
+/**
+ * Output images in JPEG format
+ */
+if (!defined('SI_IMAGE_JPEG'))
+  define('SI_IMAGE_JPEG', 1);
+/**
+ * Output images in PNG format
+ */
+if (!defined('SI_IMAGE_PNG'))
+  define('SI_IMAGE_PNG',  2);
+/**
+ * Output images in GIF format (not recommended)
+ * Must have GD >= 2.0.28!
+ */
+if (!defined('SI_IMAGE_GIF'))
+  define('SI_IMAGE_GIF',  3);
+
+/**
+ * Securimage CAPTCHA Class.
+ *
+ * @package    Securimage
+ * @subpackage classes
+ *
+ */
+class Securimage {
+
+	/**
+	 * The desired width of the CAPTCHA image.
+	 *
+	 * @var int
+	 */
+	var $image_width;
+
+	/**
+	 * The desired width of the CAPTCHA image.
+	 *
+	 * @var int
+	 */
+	var $image_height;
+
+	/**
+	 * The image format for output.<br />
+	 * Valid options: SI_IMAGE_PNG, SI_IMAGE_JPG, SI_IMAGE_GIF
+	 *
+	 * @var int
+	 */
+	var $image_type;
+
+	/**
+	 * The length of the code to generate.
+	 *
+	 * @var int
+	 */
+	var $code_length;
+
+	/**
+	 * The character set for individual characters in the image.<br />
+	 * Letters are converted to uppercase.<br />
+	 * The font must support the letters or there may be problematic substitutions.
+	 *
+	 * @var string
+	 */
+	var $charset;
+
+	/**
+	 * Create codes using this word list
+	 *
+	 * @var string  The path to the word list to use for creating CAPTCHA codes
+	 */
+	var $wordlist_file;
+
+	/**
+	 * Use wordlist of not
+	 *
+	 * @var bool true to use wordlist file, false to use random code
+	 */
+	var $use_wordlist = false;
+
+	/**
+	 * Note: Use of GD fonts is not recommended as many distortion features are not available<br />
+	 * The GD font to use.<br />
+	 * Internal gd fonts can be loaded by their number.<br />
+	 * Alternatively, a file path can be given and the font will be loaded from file.
+	 *
+	 * @var mixed
+	 */
+	var $gd_font_file;
+
+	/**
+	 * The approximate size of the font in pixels.<br />
+	 * This does not control the size of the font because that is determined by the GD font itself.<br />
+	 * This is used to aid the calculations of positioning used by this class.<br />
+	 *
+	 * @var int
+	 */
+	var $gd_font_size;
+
+	/**
+	 * Use a gd font instead of TTF
+	 *
+	 * @var bool true for gd font, false for TTF
+	 */
+	var $use_gd_font;
+
+	// Note: These font options below do not apply if you set $use_gd_font to true with the exception of $text_color
+
+	/**
+	 * The path to the TTF font file to load.
+	 *
+	 * @var string
+	 */
+	var $ttf_file;
+
+	/**
+	 * How much to distort image, higher = more distortion.<br />
+	 * Distortion is only available when using TTF fonts.<br />
+	 *
+	 * @var float
+	 */
+	var $perturbation;
+
+	/**
+	 * The minimum angle in degrees, with 0 degrees being left-to-right reading text.<br />
+	 * Higher values represent a counter-clockwise rotation.<br />
+	 * For example, a value of 90 would result in bottom-to-top reading text.<br />
+	 * This value along with maximum angle distance do not need to be very high with perturbation
+	 *
+	 * @var int
+	 */
+	var $text_angle_minimum;
+
+	/**
+	 * The minimum angle in degrees, with 0 degrees being left-to-right reading text.<br />
+	 * Higher values represent a counter-clockwise rotation.<br />
+	 * For example, a value of 90 would result in bottom-to-top reading text.
+	 *
+	 * @var int
+	 */
+	var $text_angle_maximum;
+
+	/**
+	 * The X-Position on the image where letter drawing will begin.<br />
+	 * This value is in pixels from the left side of the image.
+	 *
+	 * @var int
+	 * @deprecated 2.0
+	 */
+	var $text_x_start;
+
+	/**
+	 * The background color for the image as a Securimage_Color.<br />
+	 *
+	 * @var Securimage_Color
+	 */
+	var $image_bg_color;
+
+	/**
+	 * Scan this directory for gif, jpg, and png files to use as background images.<br />
+	 * A random image file will be picked each time.<br />
+	 * Change from null to the full path to your directory.<br />
+	 * i.e. var $background_directory = $_SERVER['DOCUMENT_ROOT'] . '/securimage/backgrounds';
+	 * Make sure not to pass a background image to the show function, otherwise this directive is ignored.
+	 *
+	 * @var string
+	 */
+	var $background_directory = null; //'./backgrounds';
+
+	/**
+	 * The text color to use for drawing characters as a Securimage_Color.<br />
+	 * This value is ignored if $use_multi_text is set to true.<br />
+	 * Make sure this contrasts well with the background color or image.<br />
+	 *
+	 * @see Securimage::$use_multi_text
+	 * @var Securimage_Color
+	 */
+	var $text_color;
+
+	/**
+	 * Set to true to use multiple colors for each character.
+	 *
+	 * @see Securimage::$multi_text_color
+	 * @var boolean
+	 */
+	var $use_multi_text;
+
+	/**
+	 * Array of Securimage_Colors which will be randomly selected for each letter.<br />
+	 *
+	 * @var array
+	 */
+	var $multi_text_color;
+
+	/**
+	 * Set to true to make the characters appear transparent.
+	 *
+	 * @see Securimage::$text_transparency_percentage
+	 * @var boolean
+	 */
+	var $use_transparent_text;
+
+	/**
+	 * The percentage of transparency, 0 to 100.<br />
+	 * A value of 0 is completely opaque, 100 is completely transparent (invisble)
+	 *
+	 * @see Securimage::$use_transparent_text
+	 * @var int
+	 */
+	var $text_transparency_percentage;
+
+
+	// Line options
+	/**
+	* Draw vertical and horizontal lines on the image.
+	*
+	* @see Securimage::$line_color
+	* @see Securimage::$draw_lines_over_text
+	* @var boolean
+	*/
+	var $num_lines;
+
+	/**
+	 * Color of lines drawn over text
+	 *
+	 * @var string
+	 */
+	var $line_color;
+
+	/**
+	 * Draw the lines over the text.<br />
+	 * If fales lines will be drawn before putting the text on the image.
+	 *
+	 * @var boolean
+	 */
+	var $draw_lines_over_text;
+
+	/**
+	 * Text to write at the bottom corner of captcha image
+	 * 
+	 * @since 2.0
+	 * @var string Signature text
+	 */
+	var $image_signature;
+	
+	/**
+	 * Color to use for writing signature text
+	 * 
+	 * @since 2.0
+	 * @var Securimage_Color
+	 */
+	var $signature_color;
+
+	/**
+	 * Full path to the WAV files to use to make the audio files, include trailing /.<br />
+	 * Name Files  [A-Z0-9].wav
+	 *
+	 * @since 1.0.1
+	 * @var string
+	 */
+	var $audio_path;
+
+	/**
+	 * Type of audio file to generate (mp3 or wav)
+	 *
+	 * @var string
+	 */
+	var $audio_format;
+
+	/**
+	 * The session name to use if not the default.  Blank for none
+	 *
+	 * @see http://php.net/session_name
+	 * @since 2.0
+	 * @var string
+	 */
+	var $session_name = '';
+	
+	/**
+	 * The amount of time in seconds that a code remains valid.<br />
+	 * Any code older than this number will be considered invalid even if entered correctly.<br />
+	 * Any non-numeric or value less than 1 disables this functionality.
+	 * 
+	 * @var int
+	 */
+	var $expiry_time;
+	
+	/**
+	 * Path to the file to use for storing codes for users.<br />
+	 * THIS FILE MUST ABSOLUTELY NOT BE ACCESSIBLE FROM A WEB BROWSER!!<br />
+	 * Put this file in a directory below the web root or one that is restricted (i.e. an apache .htaccess file with deny from all)<br />
+	 * If you cannot meet those requirements your forms may not be completely protected.<br />
+	 * You could obscure the database file name but this is also not recommended.
+	 * 
+	 * @var string
+	 */
+	var $sqlite_database;
+	
+	/**
+	 * Use an SQLite database for storing codes as a backup to sessions.<br />
+	 * Note: Sessions will still be used 
+	 */
+	var $use_sqlite_db;
+
+
+	//END USER CONFIGURATION
+	//There should be no need to edit below unless you really know what you are doing.
+
+	/**
+	 * The gd image resource.
+	 *
+	 * @access private
+	 * @var resource
+	 */
+	var $im;
+
+	/**
+	 * Temporary image for rendering
+	 *
+	 * @access private
+	 * @var resource
+	 */
+	var $tmpimg;
+
+	/**
+	 * Internal scale factor for anti-alias @hkcaptcha
+	 *
+	 * @access private
+	 * @since 2.0
+	 * @var int
+	 */
+	var $iscale; // internal scale factor for anti-alias @hkcaptcha
+
+	/**
+	 * The background image resource
+	 *
+	 * @access private
+	 * @var resource
+	 */
+	var $bgimg;
+
+	/**
+	 * The code generated by the script
+	 *
+	 * @access private
+	 * @var string
+	 */
+	var $code;
+
+	/**
+	 * The code that was entered by the user
+	 *
+	 * @access private
+	 * @var string
+	 */
+	var $code_entered;
+
+	/**
+	 * Whether or not the correct code was entered
+	 *
+	 * @access private
+	 * @var boolean
+	 */
+	var $correct_code;
+	
+	/**
+	 * Handle to SQLite database
+	 *
+	 * @access private
+	 * @var resource
+	 */
+	var $sqlite_handle;
+	
+	/**
+	 * Color resource for image line color
+	 * 
+	 * @access private
+	 * @var int
+	 */
+	var $gdlinecolor;
+	
+	/**
+	 * Array of colors for multi colored codes
+	 * 
+	 * @access private
+	 * @var array
+	 */
+	var $gdmulticolor;
+	
+	/**
+	 * Color resource for image font color
+	 * 
+	 * @access private
+	 * @var int
+	 */
+	var $gdtextcolor;
+	
+	/**
+	 * Color resource for image signature color
+	 * 
+	 * @access private
+	 * @var int
+	 */
+	var $gdsignaturecolor;
+	
+	/**
+	 * Color resource for image background color
+	 * 
+	 * @access private
+	 * @var int
+	 */
+	var $gdbgcolor;
+	
+
+	/**
+	 * Class constructor.<br />
+	 * Because the class uses sessions, this will attempt to start a session if there is no previous one.<br />
+	 * If you do not start a session before calling the class, the constructor must be called before any
+	 * output is sent to the browser.
+	 *
+	 * <code>
+	 *   $securimage = new Securimage();
+	 * </code>
+	 *
+	 */
+	function Securimage()
+	{
+		// Initialize session or attach to existing
+		if ( session_id() == '' ) { // no session has been started yet, which is needed for validation
+			if (trim($this->session_name) != '') {
+				session_name($this->session_name); // set session name if provided
+			}
+			session_start();
+		}
+
+		// Set Default Values
+		$this->image_width   = 230;
+		$this->image_height  = 80;
+		$this->image_type    = SI_IMAGE_PNG;
+
+		$this->code_length   = 6;
+		$this->charset       = 'ABCDEFGHKLMNPRSTUVWYZabcdefghklmnprstuvwyz23456789';
+		$this->wordlist_file = './words/words.txt';
+		$this->use_wordlist  = false;
+
+		$this->gd_font_file  = 'gdfonts/automatic.gdf';
+		$this->use_gd_font   = false;
+		$this->gd_font_size  = 24;
+		$this->text_x_start  = 15;
+
+		$this->ttf_file      = './AHGBold.ttf';
+
+		$this->perturbation       = 0.75;
+		$this->iscale             = 5;
+		$this->text_angle_minimum = 0;
+		$this->text_angle_maximum = 0;
+
+		$this->image_bg_color   = new Securimage_Color(0xff, 0xff, 0xff);
+    $this->text_color       = new Securimage_Color(0x3d, 0x3d, 0x3d);
+		$this->multi_text_color = array(new Securimage_Color(0x0, 0x20, 0xCC),
+																		new Securimage_Color(0x0, 0x30, 0xEE),
+																		new Securimage_color(0x0, 0x40, 0xCC),
+																		new Securimage_Color(0x0, 0x50, 0xEE),
+																		new Securimage_Color(0x0, 0x60, 0xCC));
+		$this->use_multi_text   = false;
+
+		$this->use_transparent_text         = false;
+		$this->text_transparency_percentage = 30;
+
+		$this->num_lines            = 10;
+		$this->line_color           = new Securimage_Color(0x3d, 0x3d, 0x3d);
+		$this->draw_lines_over_text = true;
+
+		$this->image_signature = '';
+		$this->signature_color = new Securimage_Color(0x20, 0x50, 0xCC);
+		$this->signature_font  = './AHGBold.ttf';
+
+		$this->audio_path   = './audio/';
+		$this->audio_format = 'mp3';
+		$this->session_name = '';
+		$this->expiry_time  = 900;
+		
+		$this->sqlite_database = 'database/securimage.sqlite';
+		$this->use_sqlite_db   = false;
+		
+		$this->sqlite_handle = false;
+	}
+
+	/**
+	 * Generate a code and output the image to the browser.
+	 *
+	 * <code>
+	 *   <?php
+	 *   include 'securimage.php';
+	 *   $securimage = new Securimage();
+	 *   $securimage->show('bg.jpg');
+	 *   ?>
+	 * </code>
+	 *
+	 * @param string $background_image  The path to an image to use as the background for the CAPTCHA
+	 */
+	function show($background_image = "")
+	{
+		if($background_image != "" && is_readable($background_image)) {
+			$this->bgimg = $background_image;
+		}
+
+		$this->doImage();
+	}
+
+	/**
+	 * Validate the code entered by the user.
+	 *
+	 * <code>
+	 *   $code = $_POST['code'];
+	 *   if ($securimage->check($code) == false) {
+	 *     die("Sorry, the code entered did not match.");
+	 *   } else {
+	 *     $valid = true;
+	 *   }
+	 * </code>
+	 * @param string $code  The code the user entered
+	 * @return boolean  true if the code was correct, false if not
+	 */
+	function check($code)
+	{
+		$this->code_entered = $code;
+		$this->validate();
+		return $this->correct_code;
+	}
+
+	/**
+	 * Output audio file with HTTP headers to browser
+	 * 
+	 * <code>
+	 *   $sound = new Securimage();
+	 *   $sound->audio_format = 'mp3';
+	 *   $sound->outputAudioFile();
+	 * </code>
+	 * 
+	 * @since 2.0
+	 */
+	function outputAudioFile()
+	{
+		if (strtolower($this->audio_format) == 'wav') {
+			header('Content-type: audio/x-wav');
+			$ext = 'wav';
+		} else {
+			header('Content-type: audio/mpeg'); // default to mp3
+			$ext = 'mp3';
+		}
+
+		header("Content-Disposition: attachment; filename=\"securimage_audio.{$ext}\"");
+		header('Cache-Control: no-store, no-cache, must-revalidate');
+		header('Expires: Sun, 1 Jan 2000 12:00:00 GMT');
+		header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
+
+		$audio = $this->getAudibleCode($ext);
+
+		header('Content-Length: ' . strlen($audio));
+
+		echo $audio;
+		exit;
+	}
+
+	/**
+	 * Generate and output the image
+	 *
+	 * @access private
+	 *
+	 */
+	function doImage()
+	{
+		if ($this->use_gd_font == true) {
+			$this->iscale = 1;
+		}
+		if($this->use_transparent_text == true || $this->bgimg != "") {
+			$this->im     = imagecreatetruecolor($this->image_width, $this->image_height);
+			$this->tmpimg = imagecreatetruecolor($this->image_width * $this->iscale, $this->image_height * $this->iscale);
+
+		} else { //no transparency
+			$this->im     = imagecreate($this->image_width, $this->image_height);
+			$this->tmpimg = imagecreate($this->image_width * $this->iscale, $this->image_height * $this->iscale);
+		}
+		
+		$this->allocateColors();
+		imagepalettecopy($this->tmpimg, $this->im);
+
+		$this->setBackground();
+
+		$this->createCode();
+
+		if (!$this->draw_lines_over_text && $this->num_lines > 0) $this->drawLines();
+
+		$this->drawWord();
+		if ($this->use_gd_font == false && is_readable($this->ttf_file)) $this->distortedCopy();
+
+		if ($this->draw_lines_over_text && $this->num_lines > 0) $this->drawLines();
+
+		if (trim($this->image_signature) != '')	$this->addSignature();
+
+		$this->output();
+
+	}
+	
+	/**
+	 * Allocate all colors that will be used in the CAPTCHA image
+	 * 
+	 * @since 2.0.1
+	 * @access private
+	 */
+	function allocateColors()
+	{
+		// allocate bg color first for imagecreate
+		$this->gdbgcolor = imagecolorallocate($this->im, $this->image_bg_color->r, $this->image_bg_color->g, $this->image_bg_color->b);
+		
+		$alpha = intval($this->text_transparency_percentage / 100 * 127);
+		
+		if ($this->use_transparent_text == true) {
+      $this->gdtextcolor = imagecolorallocatealpha($this->im, $this->text_color->r, $this->text_color->g, $this->text_color->b, $alpha);
+      $this->gdlinecolor = imagecolorallocatealpha($this->im, $this->line_color->r, $this->line_color->g, $this->line_color->b, $alpha);
+		} else {
+			$this->gdtextcolor = imagecolorallocate($this->im, $this->text_color->r, $this->text_color->g, $this->text_color->b);
+      $this->gdlinecolor = imagecolorallocate($this->im, $this->line_color->r, $this->line_color->g, $this->line_color->b);
+		}
+    
+    $this->gdsignaturecolor = imagecolorallocate($this->im, $this->signature_color->r, $this->signature_color->g, $this->signature_color->b);
+    
+    if ($this->use_multi_text == true) {
+    	$this->gdmulticolor = array();
+    	
+    	foreach($this->multi_text_color as $color) {
+    		if ($this->use_transparent_text == true) {
+    		  $this->gdmulticolor[] = imagecolorallocatealpha($this->im, $color->r, $color->g, $color->b, $alpha);
+    		} else {
+    			$this->gdmulticolor[] = imagecolorallocate($this->im, $color->r, $color->g, $color->b);
+    		}
+    	}
+    }
+	}
+
+	/**
+	 * Set the background of the CAPTCHA image
+	 *
+	 * @access private
+	 *
+	 */
+	function setBackground()
+	{
+		imagefilledrectangle($this->im, 0, 0, $this->image_width * $this->iscale, $this->image_height * $this->iscale, $this->gdbgcolor);
+    imagefilledrectangle($this->tmpimg, 0, 0, $this->image_width * $this->iscale, $this->image_height * $this->iscale, $this->gdbgcolor);
+    
+		if ($this->bgimg == '') {
+			if ($this->background_directory != null && is_dir($this->background_directory) && is_readable($this->background_directory)) {
+				$img = $this->getBackgroundFromDirectory();
+				if ($img != false) {
+					$this->bgimg = $img;
+				}
+			}
+		}
+
+		$dat = @getimagesize($this->bgimg);
+		if($dat == false) { 
+			return;
+		}
+
+		switch($dat[2]) {
+			case 1:  $newim = @imagecreatefromgif($this->bgimg); break;
+			case 2:  $newim = @imagecreatefromjpeg($this->bgimg); break;
+			case 3:  $newim = @imagecreatefrompng($this->bgimg); break;
+			case 15: $newim = @imagecreatefromwbmp($this->bgimg); break;
+			case 16: $newim = @imagecreatefromxbm($this->bgimg); break;
+			default: return;
+		}
+
+		if(!$newim) return;
+
+		imagecopyresized($this->im, $newim, 0, 0, 0, 0, $this->image_width, $this->image_height, imagesx($newim), imagesy($newim));
+	}
+
+	/**
+	 * Return the full path to a random gif, jpg, or png from the background directory.
+	 *
+	 * @access private
+	 * @see Securimage::$background_directory
+	 * @return mixed  false if none found, string $path if found
+	 */
+	function getBackgroundFromDirectory()
+	{
+		$images = array();
+
+		if ($dh = opendir($this->background_directory)) {
+			while (($file = readdir($dh)) !== false) {
+				if (preg_match('/(jpg|gif|png)$/i', $file)) $images[] = $file;
+			}
+
+			closedir($dh);
+
+			if (sizeof($images) > 0) {
+				return rtrim($this->background_directory, '/') . '/' . $images[rand(0, sizeof($images)-1)];
+			}
+		}
+
+		return false;
+	}
+
+	/**
+	 * Draw random curvy lines over the image<br />
+	 * Modified code from HKCaptcha
+	 *
+	 * @since 2.0
+	 * @access private
+	 *
+	 */
+	function drawLines()
+	{
+		for ($line = 0; $line < $this->num_lines; ++$line) {
+			$x = $this->image_width * (1 + $line) / ($this->num_lines + 1);
+			$x += (0.5 - $this->frand()) * $this->image_width / $this->num_lines;
+			$y = rand($this->image_height * 0.1, $this->image_height * 0.9);
+			 
+			$theta = ($this->frand()-0.5) * M_PI * 0.7;
+			$w = $this->image_width;
+			$len = rand($w * 0.4, $w * 0.7);
+			$lwid = rand(0, 2);
+			 
+			$k = $this->frand() * 0.6 + 0.2;
+			$k = $k * $k * 0.5;
+			$phi = $this->frand() * 6.28;
+			$step = 0.5;
+			$dx = $step * cos($theta);
+			$dy = $step * sin($theta);
+			$n = $len / $step;
+			$amp = 1.5 * $this->frand() / ($k + 5.0 / $len);
+			$x0 = $x - 0.5 * $len * cos($theta);
+			$y0 = $y - 0.5 * $len * sin($theta);
+			 
+			$ldx = round(-$dy * $lwid);
+			$ldy = round($dx * $lwid);
+			 
+			for ($i = 0; $i < $n; ++$i) {
+				$x = $x0 + $i * $dx + $amp * $dy * sin($k * $i * $step + $phi);
+				$y = $y0 + $i * $dy - $amp * $dx * sin($k * $i * $step + $phi);
+				imagefilledrectangle($this->im, $x, $y, $x + $lwid, $y + $lwid, $this->gdlinecolor);
+			}
+		}
+	}
+
+	/**
+	 * Draw the CAPTCHA code over the image
+	 *
+	 * @access private
+	 *
+	 */
+	function drawWord()
+	{
+		$width2 = $this->image_width * $this->iscale;
+		$height2 = $this->image_height * $this->iscale;
+		 
+		if ($this->use_gd_font == true || !is_readable($this->ttf_file)) {
+			if (!is_int($this->gd_font_file)) { //is a file name
+				$font = @imageloadfont($this->gd_font_file);
+				if ($font == false) {
+					trigger_error("Failed to load GD Font file {$this->gd_font_file} ", E_USER_WARNING);
+					return;
+				}
+			} else { //gd font identifier
+				$font = $this->gd_font_file;
+			}
+
+			imagestring($this->im, $font, $this->text_x_start, ($this->image_height / 2) - ($this->gd_font_size / 2), $this->code, $this->gdtextcolor);
+		} else { //ttf font
+			$font_size = $height2 * .35;
+			$bb = imagettfbbox($font_size, 0, $this->ttf_file, $this->code);
+			$tx = $bb[4] - $bb[0];
+			$ty = $bb[5] - $bb[1];
+			$x  = floor($width2 / 2 - $tx / 2 - $bb[0]);
+			$y  = round($height2 / 2 - $ty / 2 - $bb[1]);
+
+			$strlen = strlen($this->code);
+			if (!is_array($this->multi_text_color)) $this->use_multi_text = false;
+
+
+			if ($this->use_multi_text == false && $this->text_angle_minimum == 0 && $this->text_angle_maximum == 0) { // no angled or multi-color characters
+				imagettftext($this->tmpimg, $font_size, 0, $x, $y, $this->gdtextcolor, $this->ttf_file, $this->code);
+			} else {
+				for($i = 0; $i < $strlen; ++$i) {
+					$angle = rand($this->text_angle_minimum, $this->text_angle_maximum);
+					$y = rand($y - 5, $y + 5);
+					if ($this->use_multi_text == true) {
+						$font_color = $this->gdmulticolor[rand(0, sizeof($this->gdmulticolor) - 1)];
+					} else {
+						$font_color = $this->gdtextcolor;
+					}
+					
+					$ch = $this->code{$i};
+					 
+					imagettftext($this->tmpimg, $font_size, $angle, $x, $y, $font_color, $this->ttf_file, $ch);
+					 
+					// estimate character widths to increment $x without creating spaces that are too large or too small
+					// these are best estimates to align text but may vary between fonts
+					// for optimal character widths, do not use multiple text colors or character angles and the complete string will be written by imagettftext
+					if (strpos('abcdeghknopqsuvxyz', $ch) !== false) {
+						$min_x = $font_size - ($this->iscale * 6);
+						$max_x = $font_size - ($this->iscale * 6);
+					} else if (strpos('ilI1', $ch) !== false) {
+						$min_x = $font_size / 5;
+						$max_x = $font_size / 3;
+					} else if (strpos('fjrt', $ch) !== false) {
+						$min_x = $font_size - ($this->iscale * 12);
+						$max_x = $font_size - ($this->iscale * 12);
+					} else if ($ch == 'wm') {
+						$min_x = $font_size;
+						$max_x = $font_size + ($this->iscale * 3);
+					} else { // numbers, capitals or unicode
+						$min_x = $font_size + ($this->iscale * 2);
+						$max_x = $font_size + ($this->iscale * 5);
+					}
+					 
+					$x += rand($min_x, $max_x);
+				} //for loop
+			} // angled or multi-color
+		} //else ttf font
+		//$this->im = $this->tmpimg;
+		//$this->output();
+	} //function
+
+	/**
+	 * Warp text from temporary image onto final image.<br />
+	 * Modified for securimage
+	 *
+	 * @access private
+	 * @since 2.0
+	 * @author Han-Kwang Nienhuys modified
+	 * @copyright Han-Kwang Neinhuys
+	 *
+	 */
+	function distortedCopy()
+	{
+		$numpoles = 3; // distortion factor
+		 
+		// make array of poles AKA attractor points
+		for ($i = 0; $i < $numpoles; ++$i) {
+			$px[$i]  = rand($this->image_width * 0.3, $this->image_width * 0.7);
+			$py[$i]  = rand($this->image_height * 0.3, $this->image_height * 0.7);
+			$rad[$i] = rand($this->image_width * 0.4, $this->image_width * 0.7);
+			$tmp     = -$this->frand() * 0.15 - 0.15;
+			$amp[$i] = $this->perturbation * $tmp;
+		}
+		 
+		$bgCol   = imagecolorat($this->tmpimg, 0, 0);
+		$width2  = $this->iscale * $this->image_width;
+		$height2 = $this->iscale * $this->image_height;
+		 
+		imagepalettecopy($this->im, $this->tmpimg); // copy palette to final image so text colors come across
+		 
+		// loop over $img pixels, take pixels from $tmpimg with distortion field
+		for ($ix = 0; $ix < $this->image_width; ++$ix) {
+			for ($iy = 0; $iy < $this->image_height; ++$iy) {
+				$x = $ix;
+				$y = $iy;
+					
+				for ($i = 0; $i < $numpoles; ++$i) {
+					$dx = $ix - $px[$i];
+					$dy = $iy - $py[$i];
+					if ($dx == 0 && $dy == 0) continue;
+
+					$r = sqrt($dx * $dx + $dy * $dy);
+					if ($r > $rad[$i]) continue;
+
+					$rscale = $amp[$i] * sin(3.14 * $r / $rad[$i]);
+					$x += $dx * $rscale;
+					$y += $dy * $rscale;
+				}
+					
+				$c = $bgCol;
+				$x *= $this->iscale;
+				$y *= $this->iscale;
+
+				if ($x >= 0 && $x < $width2 && $y >= 0 && $y < $height2) {
+					$c = imagecolorat($this->tmpimg, $x, $y);
+				}
+
+				if ($c != $bgCol) { // only copy pixels of letters to preserve any background image
+					imagesetpixel($this->im, $ix, $iy, $c);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Create a code and save to the session
+	 *
+	 * @access private
+	 * @since 1.0.1
+	 *
+	 */
+	function createCode()
+	{
+		$this->code = false;
+
+		if ($this->use_wordlist && is_readable($this->wordlist_file)) {
+			$this->code = $this->readCodeFromFile();
+		}
+
+		if ($this->code == false) {
+			$this->code = $this->generateCode($this->code_length);
+		}
+		
+		$this->saveData();
+	}
+
+	/**
+	 * Generate a code
+	 *
+	 * @access private
+	 * @param int $len  The code length
+	 * @return string
+	 */
+	function generateCode($len)
+	{
+		$code = '';
+
+		for($i = 1, $cslen = strlen($this->charset); $i <= $len; ++$i) {
+			$code .= $this->charset{rand(0, $cslen - 1)};
+		}
+		return $code;
+	}
+
+	/**
+	 * Reads a word list file to get a code
+	 *
+	 * @access private
+	 * @since 1.0.2
+	 * @return mixed  false on failure, a word on success
+	 */
+	function readCodeFromFile()
+	{
+		$fp = @fopen($this->wordlist_file, 'rb');
+		if (!$fp) return false;
+
+		$fsize = filesize($this->wordlist_file);
+		if ($fsize < 32) return false; // too small of a list to be effective
+
+		if ($fsize < 128) {
+			$max = $fsize; // still pretty small but changes the range of seeking
+		} else {
+			$max = 128;
+		}
+
+		fseek($fp, rand(0, $fsize - $max), SEEK_SET);
+		$data = fread($fp, 128); // read a random 128 bytes from file
+		fclose($fp);
+		$data = preg_replace("/\r?\n/", "\n", $data);
+
+		$start = strpos($data, "\n", rand(0, 100)) + 1; // random start position
+		$end   = strpos($data, "\n", $start);           // find end of word
+
+		return strtolower(substr($data, $start, $end - $start)); // return substring in 128 bytes
+	}
+
+	/**
+	 * Output image to the browser
+	 *
+	 * @access private
+	 *
+	 */
+	function output()
+	{
+		header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+		header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
+		header("Cache-Control: no-store, no-cache, must-revalidate");
+		header("Cache-Control: post-check=0, pre-check=0", false);
+		header("Pragma: no-cache");
+
+		switch($this->image_type)
+		{
+			case SI_IMAGE_JPEG:
+				header("Content-Type: image/jpeg");
+				imagejpeg($this->im, null, 90);
+				break;
+
+			case SI_IMAGE_GIF:
+				header("Content-Type: image/gif");
+				imagegif($this->im);
+				break;
+
+			default:
+				header("Content-Type: image/png");
+				imagepng($this->im);
+				break;
+		}
+
+		imagedestroy($this->im);
+		exit;
+	}
+
+	/**
+	 * Get WAV or MP3 file data of the spoken code.<br />
+	 * This is appropriate for output to the browser as audio/x-wav or audio/mpeg
+	 *
+	 * @since 1.0.1
+	 * @return string  WAV or MP3 data
+	 *
+	 */
+	function getAudibleCode($format = 'wav')
+	{
+		$letters = array();
+		$code    = $this->getCode();
+
+		if ($code == '') {
+			$this->createCode();
+			$code = $this->getCode();
+		}
+
+		for($i = 0; $i < strlen($code); ++$i) {
+			$letters[] = $code{$i};
+		}
+
+		if ($format == 'mp3') {
+			return $this->generateMP3($letters);
+		} else {
+			return $this->generateWAV($letters);
+		}
+	}
+
+	/**
+	 * Set the path to the audio directory.<br />
+	 *
+	 * @since 1.0.4
+	 * @return bool true if the directory exists and is readble, false if not
+	 */
+	function setAudioPath($audio_directory)
+	{
+		if (is_dir($audio_directory) && is_readable($audio_directory)) {
+			$this->audio_path = $audio_directory;
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * Save the code in the session
+	 *
+	 * @access private
+	 *
+	 */
+	function saveData()
+	{
+		$_SESSION['securimage_code_value'] = strtolower($this->code);
+		$_SESSION['securimage_code_ctime'] = time();
+		
+		$this->saveCodeToDatabase();
+	}
+
+	/**
+	 * Validate the code to the user code
+	 *
+	 * @access private
+	 *
+	 */
+	function validate()
+	{
+		// retrieve code from session, if no code exists check sqlite database if supported.
+		
+		if (isset($_SESSION['securimage_code_value']) && trim($_SESSION['securimage_code_value']) != '') {
+			if ($this->isCodeExpired($_SESSION['securimage_code_ctime']) == false) { 
+			  $code = $_SESSION['securimage_code_value'];
+			}
+		} else if ($this->use_sqlite_db == true && function_exists('sqlite_open')) { // no code in session - may mean user has cookies turned off
+			$this->openDatabase();
+			$code = $this->getCodeFromDatabase();
+		} else {
+			// session code invalid or non-existant and code not found in sqlite db or sqlite is not available
+			$code = '';
+		}
+		
+		$code               = trim(strtolower($code));
+		$code_entered       = trim(strtolower($this->code_entered));
+		$this->correct_code = false;
+		
+		if ($code != '') {
+			if ($code == $code_entered) {
+			  $this->correct_code = true;
+			  $_SESSION['securimage_code_value'] = '';
+			  $_SESSION['securimage_code_ctime'] = '';
+			  $this->clearCodeFromDatabase();
+		  }
+		}
+	}
+
+	/**
+	 * Get the captcha code
+	 *
+	 * @since 1.0.1
+	 * @return string
+	 */
+	function getCode()
+	{
+		if (isset($_SESSION['securimage_code_value']) && !empty($_SESSION['securimage_code_value'])) {
+			return strtolower($_SESSION['securimage_code_value']);
+		} else {
+			if ($this->sqlite_handle == false) $this->openDatabase();
+			
+			return $this->getCodeFromDatabase(); // attempt to get from database, returns empty string if sqlite is not available or disabled
+		}
+	}
+
+	/**
+	 * Check if the user entered code was correct
+	 *
+	 * @access private
+	 * @return boolean
+	 */
+	function checkCode()
+	{
+		return $this->correct_code;
+	}
+
+	/**
+	 * Generate a wav file by concatenating individual files
+	 *
+	 * @since 1.0.1
+	 * @access private
+	 * @param array $letters  Array of letters to build a file from
+	 * @return string  WAV file data
+	 */
+	function generateWAV($letters)
+	{
+		$data_len    = 0;
+		$files       = array();
+		$out_data    = '';
+
+		foreach ($letters as $letter) {
+			$filename = $this->audio_path . strtoupper($letter) . '.wav';
+
+			$fp = fopen($filename, 'rb');
+
+			$file = array();
+
+			$data = fread($fp, filesize($filename)); // read file in
+
+			$header = substr($data, 0, 36);
+			$body   = substr($data, 44);
+
+
+			$data = unpack('NChunkID/VChunkSize/NFormat/NSubChunk1ID/VSubChunk1Size/vAudioFormat/vNumChannels/VSampleRate/VByteRate/vBlockAlign/vBitsPerSample', $header);
+
+			$file['sub_chunk1_id']   = $data['SubChunk1ID'];
+			$file['bits_per_sample'] = $data['BitsPerSample'];
+			$file['channels']        = $data['NumChannels'];
+			$file['format']          = $data['AudioFormat'];
+			$file['sample_rate']     = $data['SampleRate'];
+			$file['size']            = $data['ChunkSize'] + 8;
+			$file['data']            = $body;
+
+			if ( ($p = strpos($file['data'], 'LIST')) !== false) {
+				// If the LIST data is not at the end of the file, this will probably break your sound file
+				$info         = substr($file['data'], $p + 4, 8);
+				$data         = unpack('Vlength/Vjunk', $info);
+				$file['data'] = substr($file['data'], 0, $p);
+				$file['size'] = $file['size'] - (strlen($file['data']) - $p);
+			}
+
+			$files[] = $file;
+			$data    = null;
+			$header  = null;
+			$body    = null;
+
+			$data_len += strlen($file['data']);
+
+			fclose($fp);
+		}
+
+		$out_data = '';
+		for($i = 0; $i < sizeof($files); ++$i) {
+			if ($i == 0) { // output header
+				$out_data .= pack('C4VC8', ord('R'), ord('I'), ord('F'), ord('F'), $data_len + 36, ord('W'), ord('A'), ord('V'), ord('E'), ord('f'), ord('m'), ord('t'), ord(' '));
+
+				$out_data .= pack('VvvVVvv',
+				16,
+				$files[$i]['format'],
+				$files[$i]['channels'],
+				$files[$i]['sample_rate'],
+				$files[$i]['sample_rate'] * (($files[$i]['bits_per_sample'] * $files[$i]['channels']) / 8),
+				($files[$i]['bits_per_sample'] * $files[$i]['channels']) / 8,
+				$files[$i]['bits_per_sample'] );
+
+				$out_data .= pack('C4', ord('d'), ord('a'), ord('t'), ord('a'));
+
+				$out_data .= pack('V', $data_len);
+			}
+
+			$out_data .= $files[$i]['data'];
+		}
+
+		$this->scrambleAudioData($out_data, 'wav');
+		return $out_data;
+	}
+
+	/**
+	 * Randomly modify the audio data to scramble sound and prevent binary recognition.<br />
+	 * Take care not to "break" the audio file by leaving the header data intact.
+	 *
+	 * @since 2.0
+	 * @access private
+	 * @param $data Sound data in mp3 of wav format
+	 */
+	function scrambleAudioData(&$data, $format)
+	{
+		if ($format == 'wav') {
+			$start = strpos($data, 'data') + 4; // look for "data" indicator
+			if ($start === false) $start = 44;  // if not found assume 44 byte header
+		} else { // mp3
+			$start = 4; // 4 byte (32 bit) frame header
+		}
+		 
+		$start  += rand(1, 64); // randomize starting offset
+		$datalen = strlen($data) - $start - 256; // leave last 256 bytes unchanged
+		 
+		for ($i = $start; $i < $datalen; $i += 64) {
+			$ch = ord($data{$i});
+			if ($ch < 9 || $ch > 119) continue;
+
+			$data{$i} = chr($ch + rand(-8, 8));
+		}
+	}
+
+	/**
+	 * Generate an mp3 file by concatenating individual files
+	 * @since 1.0.4
+	 * @access private
+	 * @param array $letters  Array of letters to build a file from
+	 * @return string  MP3 file data
+	 */
+	function generateMP3($letters)
+	{
+		$data_len    = 0;
+		$files       = array();
+		$out_data    = '';
+
+		foreach ($letters as $letter) {
+			$filename = $this->audio_path . strtoupper($letter) . '.mp3';
+
+			$fp   = fopen($filename, 'rb');
+			$data = fread($fp, filesize($filename)); // read file in
+
+			$this->scrambleAudioData($data, 'mp3');
+			$out_data .= $data;
+
+			fclose($fp);
+		}
+
+
+		return $out_data;
+	}
+
+	/**
+	 * Generate random number less than 1
+	 * @since 2.0
+	 * @access private
+	 * @return float
+	 */
+	function frand()
+	{
+		return 0.0001*rand(0,9999);
+	}
+
+	/**
+	 * Print signature text on image
+	 *
+	 * @since 2.0
+	 * @access private
+	 *
+	 */
+	function addSignature()
+	{
+		if ($this->use_gd_font) {
+			imagestring($this->im, 5, $this->image_width - (strlen($this->image_signature) * 10), $this->image_height - 20, $this->image_signature, $this->gdsignaturecolor);
+		} else {
+			 
+			$bbox = imagettfbbox(10, 0, $this->signature_font, $this->image_signature);
+			$textlen = $bbox[2] - $bbox[0];
+			$x = $this->image_width - $textlen - 5;
+			$y = $this->image_height - 3;
+			 
+			imagettftext($this->im, 10, 0, $x, $y, $this->gdsignaturecolor, $this->signature_font, $this->image_signature);
+		}
+	}
+	
+	/**
+	 * Get hashed IP address of remote user
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 * @return string
+	 */
+	function getIPHash()
+	{
+		return strtolower(md5($_SERVER['REMOTE_ADDR']));
+	}
+	
+	/**
+	 * Open SQLite database
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 * @return bool true if database was opened successfully
+	 */
+	function openDatabase()
+	{
+		$this->sqlite_handle = false;
+		
+		if ($this->use_sqlite_db && function_exists('sqlite_open')) {
+			$this->sqlite_handle = sqlite_open($this->sqlite_database, 0666, $error);
+			
+			if ($this->sqlite_handle !== false) {
+				$res = sqlite_query($this->sqlite_handle, "PRAGMA table_info(codes)");
+				if (sqlite_num_rows($res) == 0) {
+				  sqlite_query($this->sqlite_handle, "CREATE TABLE codes (iphash VARCHAR(32) PRIMARY KEY, code VARCHAR(32) NOT NULL, created INTEGER)");
+				}
+			}
+			
+			return $this->sqlite_handle != false;
+		}
+		
+		return $this->sqlite_handle;
+	}
+	
+	/**
+	 * Save captcha code to sqlite database
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 * @return bool true if code was saved, false if not
+	 */
+	function saveCodeToDatabase()
+	{
+		$success = false;
+		
+		$this->openDatabase();
+		
+		if ($this->use_sqlite_db && $this->sqlite_handle !== false) {
+			$ip = $this->getIPHash();
+			$time = time();
+			$code = $_SESSION['securimage_code_value']; // hash code for security - if cookies are disabled the session still exists at this point
+			$success = sqlite_query($this->sqlite_handle, "INSERT OR REPLACE INTO codes(iphash, code, created) VALUES('$ip', '$code', $time)");
+		}
+		
+		return $success !== false;
+	}
+	
+	/**
+	 * Get stored captcha code from sqlite database based on ip address hash
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 * @return string captcha code
+	 */
+	function getCodeFromDatabase()
+	{
+    $code = '';
+
+    if ($this->use_sqlite_db && $this->sqlite_handle !== false) {
+    	$ip = $this->getIPHash();
+    	
+    	$res = sqlite_query($this->sqlite_handle, "SELECT * FROM codes WHERE iphash = '$ip'");
+    	if ($res && sqlite_num_rows($res) > 0) {
+    		$res = sqlite_fetch_array($res);
+    		
+    		if ($this->isCodeExpired($res['created']) == false) {
+    			$code = $res['code'];
+    		}
+    	}
+    }
+    
+    return $code;
+	}
+	
+	/**
+	 * Delete a code from the database by ip address hash
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 */
+	function clearCodeFromDatabase()
+	{
+		if ($this->sqlite_handle !== false) {
+			$ip = $this->getIPHash();
+			
+			sqlite_query($this->sqlite_handle, "DELETE FROM codes WHERE iphash = '$ip'");
+		}
+	}
+	
+	/**
+	 * Purge codes over a day old from database
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 */
+	function purgeOldCodesFromDatabase()
+	{
+		if ($this->use_sqlite_db && $this->sqlite_handle !== false) {
+			$now   = time();
+			$limit = (!is_numeric($this->expiry_time) || $this->expiry_time < 1) ? 86400 : $this->expiry_time;
+			
+			sqlite_query($this->sqlite_handle, "DELETE FROM codes WHERE $now - created > $limit");
+		}
+	}
+	
+	/**
+	 * Check a code to see if it is expired based on creation time
+	 * 
+	 * @access private
+	 * @since 2.0.1
+	 * @param $creation_time unix timestamp of code creation time
+	 * @return bool true if code has expired, false if not
+	 */
+	function isCodeExpired($creation_time)
+	{
+		$expired = true;
+		
+		if (!is_numeric($this->expiry_time) || $this->expiry_time < 1) {
+			$expired = false;
+		} else if (time() - $creation_time < $this->expiry_time) {
+			$expired = false;
+		}
+		
+		return $expired;
+	}
+	
+} /* class Securimage */
+
+
+/**
+ * Color object for Securimage CAPTCHA
+ *
+ * @since 2.0
+ * @package Securimage
+ * @subpackage classes
+ *
+ */
+class Securimage_Color {
+	/**
+	 * Red component: 0-255
+	 *
+	 * @var int
+	 */
+	var $r;
+	/**
+	 * Green component: 0-255
+	 *
+	 * @var int
+	 */
+	var $g;
+	/**
+	 * Blue component: 0-255
+	 *
+	 * @var int
+	 */
+	var $b;
+
+	/**
+	 * Create a new Securimage_Color object.<br />
+	 * Specify the red, green, and blue components using their HTML hex code equivalent.<br />
+	 * Example: The code for the HTML color #4A203C is:<br />
+	 * $color = new Securimage_Color(0x4A, 0x20, 0x3C);
+	 *
+	 * @param $red Red component 0-255
+	 * @param $green Green component 0-255
+	 * @param $blue Blue component 0-255
+	 */
+	function Securimage_Color($red, $green = null, $blue = null)
+	{
+		if ($green == null && $blue == null && preg_match('/^#[a-f0-9]{3,6}$/i', $red)) {
+			$col = substr($red, 1);
+			if (strlen($col) == 3) {
+				$red   = str_repeat(substr($col, 0, 1), 2);
+				$green = str_repeat(substr($col, 1, 1), 2);
+				$blue  = str_repeat(substr($col, 2, 1), 2);
+			} else {
+				$red   = substr($col, 0, 2);
+				$green = substr($col, 2, 2);
+				$blue  = substr($col, 4, 2); 
+			}
+			
+			$red   = hexdec($red);
+			$green = hexdec($green);
+			$blue  = hexdec($blue);
+		} else {
+			if ($red < 0) $red       = 0;
+			if ($red > 255) $red     = 255;
+			if ($green < 0) $green   = 0;
+			if ($green > 255) $green = 255;
+			if ($blue < 0) $blue     = 0;
+			if ($blue > 255) $blue   = 255;
+		}
+
+		$this->r = $red;
+		$this->g = $green;
+		$this->b = $blue;
+	}
+}
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.php
new file mode 100644
index 0000000000000000000000000000000000000000..1f369bcb34ff827f995a301e9a8ce563bad1b73a
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br />
+ * File:        securimage_play.php<br />
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or any later version.<br /><br />
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.<br /><br />
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<br /><br />
+ *
+ * Any modifications to the library should be indicated clearly in the source code
+ * to inform users that the changes are not a part of the original software.<br /><br />
+ *
+ * If you found this script useful, please take a quick moment to rate it.<br />
+ * http://www.hotscripts.com/rate/49400.html  Thanks.
+ *
+ * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA
+ * @link http://www.phpcaptcha.org/latest.zip Download Latest Version
+ * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation
+ * @copyright 2009 Drew Phillips
+ * @author drew010 <drew@drew-phillips.com>
+ * @version 2.0.1 BETA (December 6th, 2009)
+ * @package Securimage
+ *
+ */
+
+include 'securimage.php';
+
+$img    = new Securimage();
+$img->audio_format = (isset($_GET['format']) && in_array(strtolower($_GET['format']), array('mp3', 'wav')) ? strtolower($_GET['format']) : 'mp3');
+//$img->setAudioPath('/path/to/securimage/audio/');
+
+$img->outputAudioFile();
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.swf b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.swf
new file mode 100644
index 0000000000000000000000000000000000000000..d1718b7355c4e8d6a03d2caab2224e9a3c862b24
Binary files /dev/null and b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_play.swf differ
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_show.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_show.php
new file mode 100644
index 0000000000000000000000000000000000000000..cbb57343d0fea09cd353052aad088353a346f559
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/securimage_show.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Project:     Securimage: A PHP class for creating and managing form CAPTCHA images<br />
+ * File:        securimage_show.php<br />
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or any later version.<br /><br />
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.<br /><br />
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<br /><br />
+ *
+ * Any modifications to the library should be indicated clearly in the source code
+ * to inform users that the changes are not a part of the original software.<br /><br />
+ *
+ * If you found this script useful, please take a quick moment to rate it.<br />
+ * http://www.hotscripts.com/rate/49400.html  Thanks.
+ *
+ * @link http://www.phpcaptcha.org Securimage PHP CAPTCHA
+ * @link http://www.phpcaptcha.org/latest.zip Download Latest Version
+ * @link http://www.phpcaptcha.org/Securimage_Docs/ Online Documentation
+ * @copyright 2009 Drew Phillips
+ * @author drew010 <drew@drew-phillips.com>
+ * @version 2.0.1 BETA (December 6th, 2009)
+ * @package Securimage
+ *
+ */
+
+include 'securimage.php';
+
+$img = new securimage();
+
+// Change some settings
+
+//$img->image_width = 275;
+//$img->image_height = 90;
+//$img->perturbation = 0.9; // 1.0 = high distortion, higher numbers = more distortion
+//$img->image_bg_color = new Securimage_Color("#0099CC");
+//$img->text_color = new Securimage_Color("#EAEAEA");
+//$img->text_transparency_percentage = 65; // 100 = completely transparent
+//$img->num_lines = 8;
+//$img->line_color = new Securimage_Color("#0000CC");
+//$img->signature_color = new Securimage_Color(rand(0, 64), rand(64, 128), rand(128, 255));
+//$img->image_type = SI_IMAGE_PNG;
+
+
+//$img->show(); // alternate use:  $img->show('/path/to/background_image.jpg');
+
+
+$img->text_color = new Securimage_Color("#EAEAEA");
+$img->num_lines = 0;
+$img->code_length = 4;
+$img->draw_lines_over_text = false;
+$img->show('backgrounds/bg6.png');
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/words/index.php b/wp-content/plugins/wp2pgpmail/phpcaptcha/words/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wp-content/plugins/wp2pgpmail/phpcaptcha/words/words.txt b/wp-content/plugins/wp2pgpmail/phpcaptcha/words/words.txt
new file mode 100644
index 0000000000000000000000000000000000000000..308d48fb5ae016fc323eaa7b4298a828b41a68c8
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/phpcaptcha/words/words.txt
@@ -0,0 +1,15621 @@
+aahing
+aaliis
+aarrgh
+abacas
+abacus
+abakas
+abamps
+abased
+abaser
+abases
+abasia
+abated
+abater
+abates
+abatis
+abator
+abayas
+abbacy
+abbess
+abbeys
+abbots
+abduce
+abduct
+abeles
+abelia
+abhors
+abided
+abider
+abides
+abject
+abjure
+ablate
+ablaut
+ablaze
+ablest
+ablins
+abloom
+ablush
+abmhos
+aboard
+aboded
+abodes
+abohms
+abolla
+abomas
+aboral
+aborts
+abound
+aboves
+abrade
+abroad
+abrupt
+abseil
+absent
+absorb
+absurd
+abulia
+abulic
+abvolt
+abwatt
+abying
+abysms
+acacia
+acajou
+acarid
+acarus
+accede
+accent
+accept
+access
+accord
+accost
+accrue
+accuse
+acedia
+acetal
+acetic
+acetin
+acetum
+acetyl
+achene
+achier
+aching
+acidic
+acidly
+acinar
+acinic
+acinus
+ackees
+acnode
+acorns
+acquit
+across
+acting
+actins
+action
+active
+actors
+actual
+acuate
+acuity
+aculei
+acumen
+acuter
+acutes
+adages
+adagio
+adapts
+addend
+adders
+addict
+adding
+addled
+addles
+adduce
+adduct
+adeems
+adenyl
+adepts
+adhere
+adieus
+adieux
+adipic
+adjoin
+adjure
+adjust
+admass
+admire
+admits
+admixt
+adnate
+adnexa
+adnoun
+adobes
+adobos
+adonis
+adopts
+adored
+adorer
+adores
+adorns
+adrift
+adroit
+adsorb
+adults
+advect
+advent
+adverb
+advert
+advice
+advise
+adytum
+adzing
+adzuki
+aecial
+aecium
+aedile
+aedine
+aeneus
+aeonic
+aerate
+aerial
+aeried
+aerier
+aeries
+aerify
+aerily
+aerobe
+aerugo
+aether
+afeard
+affair
+affect
+affine
+affirm
+afflux
+afford
+affray
+afghan
+afield
+aflame
+afloat
+afraid
+afreet
+afresh
+afrits
+afters
+aftosa
+agamas
+agamic
+agamid
+agapae
+agapai
+agapes
+agaric
+agates
+agaves
+agedly
+ageing
+ageism
+ageist
+agency
+agenda
+agenes
+agents
+aggada
+aggers
+aggies
+aggros
+aghast
+agings
+agisms
+agists
+agitas
+aglare
+agleam
+aglets
+agnail
+agnate
+agnize
+agonal
+agones
+agonic
+agorae
+agoras
+agorot
+agouti
+agouty
+agrafe
+agreed
+agrees
+agrias
+aguish
+ahchoo
+ahimsa
+aholds
+ahorse
+aiders
+aidful
+aiding
+aidman
+aidmen
+aiglet
+aigret
+aikido
+ailing
+aimers
+aimful
+aiming
+aiolis
+airbag
+airbus
+airers
+airest
+airier
+airily
+airing
+airman
+airmen
+airted
+airths
+airway
+aisled
+aisles
+aivers
+ajivas
+ajowan
+ajugas
+akelas
+akenes
+akimbo
+alamos
+alands
+alanin
+alants
+alanyl
+alarms
+alarum
+alaska
+alated
+alates
+albata
+albedo
+albeit
+albino
+albite
+albums
+alcade
+alcaic
+alcids
+alcove
+alders
+aldols
+aldose
+aldrin
+alegar
+alephs
+alerts
+alevin
+alexia
+alexin
+alfaki
+algins
+algoid
+algors
+algums
+alibis
+alible
+alidad
+aliens
+alight
+aligns
+alined
+aliner
+alines
+aliped
+aliyah
+aliyas
+aliyos
+aliyot
+alkali
+alkane
+alkene
+alkies
+alkine
+alkoxy
+alkyds
+alkyls
+alkyne
+allays
+allees
+allege
+allele
+alleys
+allied
+allies
+allium
+allods
+allots
+allows
+alloys
+allude
+allure
+allyls
+almahs
+almehs
+almner
+almond
+almost
+almuce
+almude
+almuds
+almugs
+alnico
+alodia
+alohas
+aloins
+alpaca
+alphas
+alphyl
+alpine
+alsike
+altars
+alters
+althea
+aludel
+alulae
+alular
+alumin
+alumna
+alumni
+alvine
+always
+amadou
+amarna
+amatol
+amazed
+amazes
+amazon
+ambage
+ambari
+ambary
+ambeer
+ambers
+ambery
+ambits
+ambled
+ambler
+ambles
+ambush
+amebae
+ameban
+amebas
+amebic
+ameers
+amends
+aments
+amerce
+amices
+amicus
+amides
+amidic
+amidin
+amidol
+amidst
+amigas
+amigos
+amines
+aminic
+ammine
+ammino
+ammono
+amnion
+amnios
+amoeba
+amoles
+amoral
+amount
+amours
+ampere
+amping
+ampler
+ampule
+ampuls
+amrita
+amtrac
+amucks
+amulet
+amused
+amuser
+amuses
+amusia
+amylic
+amylum
+anabas
+anadem
+analog
+ananke
+anarch
+anatto
+anchor
+anchos
+ancone
+andros
+anears
+aneled
+aneles
+anemia
+anemic
+anenst
+anergy
+angary
+angels
+angers
+angina
+angled
+angler
+angles
+anglos
+angora
+angsts
+anilin
+animal
+animas
+animes
+animis
+animus
+anions
+anises
+anisic
+ankled
+ankles
+anklet
+ankush
+anlace
+anlage
+annals
+anneal
+annexe
+annona
+annoys
+annual
+annuli
+annuls
+anodal
+anodes
+anodic
+anoint
+anoles
+anomic
+anomie
+anonym
+anopia
+anorak
+anoxia
+anoxic
+ansate
+answer
+anteed
+anthem
+anther
+antiar
+antick
+antics
+anting
+antler
+antral
+antres
+antrum
+anural
+anuran
+anuria
+anuric
+anuses
+anvils
+anyhow
+anyone
+anyons
+anyway
+aorist
+aortae
+aortal
+aortas
+aortic
+aoudad
+apache
+apathy
+apercu
+apexes
+aphids
+aphtha
+apiary
+apical
+apices
+apiece
+aplite
+aplomb
+apneal
+apneas
+apneic
+apnoea
+apodal
+apogee
+apollo
+apolog
+aporia
+appall
+appals
+appeal
+appear
+appels
+append
+apples
+applet
+appose
+aprons
+aptest
+arabic
+arable
+arames
+aramid
+arbors
+arbour
+arbute
+arcade
+arcana
+arcane
+arched
+archer
+arches
+archil
+archly
+archon
+arcing
+arcked
+arctic
+ardebs
+ardent
+ardors
+ardour
+arecas
+arenas
+arenes
+areola
+areole
+arepas
+aretes
+argala
+argali
+argals
+argent
+argils
+argled
+argles
+argols
+argons
+argosy
+argots
+argued
+arguer
+argues
+argufy
+argyle
+argyll
+arhats
+ariary
+arider
+aridly
+ariels
+aright
+ariled
+ariose
+ariosi
+arioso
+arisen
+arises
+arista
+aristo
+arkose
+armada
+armers
+armets
+armful
+armies
+arming
+armlet
+armors
+armory
+armour
+armpit
+armure
+arnica
+aroids
+aroint
+aromas
+around
+arouse
+aroynt
+arpens
+arpent
+arrack
+arrant
+arrays
+arrear
+arrest
+arriba
+arrive
+arroba
+arrows
+arrowy
+arroyo
+arseno
+arshin
+arsine
+arsino
+arsons
+artels
+artery
+artful
+artier
+artily
+artist
+asanas
+asarum
+ascend
+ascent
+ascots
+asdics
+ashcan
+ashier
+ashing
+ashlar
+ashler
+ashman
+ashmen
+ashore
+ashram
+asides
+askant
+askers
+asking
+aslant
+asleep
+aslope
+aslosh
+aspect
+aspens
+aspers
+aspics
+aspire
+aspish
+asrama
+assail
+assais
+assays
+assent
+assert
+assess
+assets
+assign
+assist
+assize
+assoil
+assort
+assume
+assure
+astern
+asters
+asthma
+astony
+astral
+astray
+astute
+aswarm
+aswirl
+aswoon
+asylum
+atabal
+ataman
+atavic
+ataxia
+ataxic
+atelic
+atlatl
+atmans
+atolls
+atomic
+atonal
+atoned
+atoner
+atones
+atonia
+atonic
+atopic
+atrial
+atrium
+attach
+attack
+attain
+attars
+attend
+attent
+attest
+attics
+attire
+attorn
+attrit
+attune
+atwain
+atween
+atypic
+aubade
+auburn
+aucuba
+audads
+audial
+audile
+auding
+audios
+audits
+augend
+augers
+aughts
+augite
+augurs
+augury
+august
+auklet
+aulder
+auntie
+auntly
+aurate
+aureus
+aurist
+aurora
+aurous
+aurums
+auspex
+ausubo
+auteur
+author
+autism
+autist
+autoed
+autumn
+auxins
+avails
+avatar
+avaunt
+avenge
+avenue
+averse
+averts
+avians
+aviary
+aviate
+avidin
+avidly
+avions
+avisos
+avocet
+avoids
+avoset
+avouch
+avowal
+avowed
+avower
+avulse
+awaits
+awaked
+awaken
+awakes
+awards
+aweary
+aweigh
+aweing
+awhile
+awhirl
+awless
+awmous
+awning
+awoken
+axeman
+axemen
+axenic
+axilla
+axioms
+axions
+axised
+axises
+axites
+axlike
+axonal
+axones
+axonic
+axseed
+azalea
+azides
+azines
+azlons
+azoles
+azonal
+azonic
+azoted
+azotes
+azoths
+azotic
+azukis
+azures
+azygos
+baaing
+baalim
+baases
+babble
+babels
+babied
+babier
+babies
+babkas
+babool
+baboon
+baboos
+babuls
+baccae
+bached
+baches
+backed
+backer
+backup
+bacons
+bacula
+badass
+badder
+baddie
+badged
+badger
+badges
+badman
+badmen
+baffed
+baffle
+bagels
+bagful
+bagged
+bagger
+baggie
+bagman
+bagmen
+bagnio
+baguet
+bagwig
+bailed
+bailee
+bailer
+bailey
+bailie
+bailor
+bairns
+baited
+baiter
+baizas
+baizes
+bakers
+bakery
+baking
+balata
+balboa
+balded
+balder
+baldly
+baleen
+balers
+baling
+balked
+balker
+ballad
+balled
+baller
+ballet
+ballon
+ballot
+ballsy
+balsam
+balsas
+bamboo
+bammed
+banana
+bancos
+bandas
+banded
+bander
+bandit
+bandog
+banged
+banger
+bangle
+banian
+baning
+banish
+banjax
+banjos
+banked
+banker
+bankit
+banned
+banner
+bannet
+bantam
+banter
+banyan
+banzai
+baobab
+barbal
+barbed
+barbel
+barber
+barbes
+barbet
+barbie
+barbut
+barcas
+barded
+bardes
+bardic
+barege
+barely
+barest
+barfed
+barfly
+barged
+bargee
+barges
+barhop
+baring
+barite
+barium
+barked
+barker
+barley
+barlow
+barman
+barmen
+barmie
+barned
+barney
+barong
+barons
+barony
+barque
+barred
+barrel
+barren
+barres
+barret
+barrio
+barrow
+barter
+baryes
+baryon
+baryta
+baryte
+basalt
+basely
+basest
+bashaw
+bashed
+basher
+bashes
+basics
+basify
+basils
+basing
+basins
+basion
+basked
+basket
+basque
+basted
+baster
+bastes
+batboy
+bateau
+bathed
+bather
+bathes
+bathos
+batiks
+bating
+batman
+batmen
+batons
+batted
+batten
+batter
+battik
+battle
+battue
+baubee
+bauble
+baulks
+baulky
+bawbee
+bawdry
+bawled
+bawler
+bawtie
+bayamo
+bayard
+baying
+bayman
+baymen
+bayous
+bazaar
+bazars
+bazoos
+beachy
+beacon
+beaded
+beader
+beadle
+beagle
+beaked
+beaker
+beamed
+beaned
+beanie
+beanos
+beards
+bearer
+beaten
+beater
+beauts
+beauty
+bebops
+becalm
+became
+becaps
+becked
+becket
+beckon
+beclog
+become
+bedamn
+bedaub
+bedbug
+bedded
+bedder
+bedeck
+bedell
+bedels
+bedews
+bedims
+bedlam
+bedpan
+bedrid
+bedrug
+bedsit
+beduin
+bedumb
+beebee
+beechy
+beefed
+beeped
+beeper
+beetle
+beeves
+beezer
+befall
+befell
+befits
+beflag
+beflea
+befogs
+befool
+before
+befoul
+befret
+begall
+begaze
+begets
+beggar
+begged
+begins
+begird
+begirt
+beglad
+begone
+begrim
+begulf
+begums
+behalf
+behave
+behead
+beheld
+behest
+behind
+behold
+behoof
+behove
+behowl
+beiges
+beigne
+beings
+bekiss
+beknot
+belady
+belaud
+belays
+beldam
+beleap
+belfry
+belgas
+belied
+belief
+belier
+belies
+belike
+belive
+belled
+belles
+bellow
+belong
+belons
+belows
+belted
+belter
+beluga
+bemata
+bemean
+bemire
+bemist
+bemixt
+bemoan
+bemock
+bemuse
+bename
+benday
+bended
+bendee
+bender
+bendys
+benign
+bennes
+bennet
+bennis
+bentos
+benumb
+benzal
+benzin
+benzol
+benzyl
+berake
+berate
+bereft
+berets
+berime
+berlin
+bermed
+bermes
+bertha
+berths
+beryls
+beseem
+besets
+beside
+besmut
+besnow
+besoms
+besots
+bested
+bestir
+bestow
+bestud
+betake
+betels
+bethel
+betide
+betime
+betise
+betons
+betony
+betook
+betray
+bettas
+betted
+better
+bettor
+bevels
+bevies
+bevors
+bewail
+beware
+beweep
+bewept
+bewigs
+beworm
+bewrap
+bewray
+beylic
+beylik
+beyond
+bezant
+bezazz
+bezels
+bezils
+bezoar
+bhakta
+bhakti
+bhangs
+bharal
+bhoots
+bialis
+bialys
+biased
+biases
+biaxal
+bibbed
+bibber
+bibles
+bicarb
+biceps
+bicker
+bicorn
+bicron
+bidden
+bidder
+biders
+bidets
+biding
+bields
+biface
+biffed
+biffin
+biflex
+bifold
+biform
+bigamy
+bigeye
+bigger
+biggie
+biggin
+bights
+bigots
+bigwig
+bijous
+bijoux
+bikers
+bikies
+biking
+bikini
+bilboa
+bilbos
+bilged
+bilges
+bilked
+bilker
+billed
+biller
+billet
+billie
+billon
+billow
+bimahs
+bimbos
+binary
+binate
+binder
+bindis
+bindle
+biners
+binged
+binger
+binges
+bingos
+binits
+binned
+binocs
+biogas
+biogen
+biomes
+bionic
+bionts
+biopic
+biopsy
+biotas
+biotic
+biotin
+bipack
+bipeds
+bipods
+birded
+birder
+birdie
+bireme
+birkie
+birled
+birler
+birles
+birred
+birses
+births
+bisect
+bishop
+bisons
+bisque
+bister
+bistre
+bistro
+bitchy
+biters
+biting
+bitmap
+bitted
+bitten
+bitter
+bizone
+bizzes
+blabby
+blacks
+bladed
+blader
+blades
+blaffs
+blains
+blamed
+blamer
+blames
+blanch
+blanks
+blared
+blares
+blasts
+blasty
+blawed
+blazed
+blazer
+blazes
+blazon
+bleach
+bleaks
+blears
+bleary
+bleats
+blebby
+bleeds
+bleeps
+blench
+blende
+blends
+blenny
+blight
+blimey
+blimps
+blinds
+blinis
+blinks
+blintz
+blites
+blithe
+bloats
+blocks
+blocky
+blokes
+blonde
+blonds
+bloods
+bloody
+blooey
+blooie
+blooms
+bloomy
+bloops
+blotch
+blotto
+blotty
+blouse
+blousy
+blowby
+blowed
+blower
+blowsy
+blowup
+blowzy
+bludge
+bluely
+bluest
+bluesy
+bluets
+blueys
+bluffs
+bluing
+bluish
+blumed
+blumes
+blunge
+blunts
+blurbs
+blurry
+blurts
+blypes
+boards
+boarts
+boasts
+boated
+boatel
+boater
+bobbed
+bobber
+bobbin
+bobble
+bobcat
+bocces
+boccia
+boccie
+boccis
+boches
+bodega
+bodice
+bodied
+bodies
+bodily
+boding
+bodkin
+boffed
+boffin
+boffos
+bogans
+bogart
+bogeys
+bogged
+boggle
+bogies
+bogles
+boheas
+bohunk
+boiled
+boiler
+boings
+boinks
+boites
+bolder
+boldly
+bolero
+bolete
+boleti
+bolide
+bolled
+bollix
+bollox
+bolshy
+bolson
+bolted
+bolter
+bombax
+bombed
+bomber
+bombes
+bombyx
+bonaci
+bonbon
+bonded
+bonder
+bonduc
+boners
+bonged
+bongos
+bonier
+boning
+bonita
+bonito
+bonked
+bonnes
+bonnet
+bonnie
+bonobo
+bonsai
+bonzer
+bonzes
+boobed
+boobie
+booboo
+boocoo
+boodle
+booger
+boogey
+boogie
+boohoo
+booing
+boojum
+booked
+booker
+bookie
+bookoo
+boomed
+boomer
+boosts
+booted
+bootee
+booths
+bootie
+boozed
+boozer
+boozes
+bopeep
+bopped
+bopper
+borage
+borals
+borane
+borate
+bordel
+border
+boreal
+boreas
+boreen
+borers
+boride
+boring
+borked
+borons
+borrow
+borsch
+borsht
+borzoi
+boshes
+bosker
+bosket
+bosoms
+bosomy
+bosons
+bosque
+bossed
+bosses
+boston
+bosuns
+botany
+botchy
+botels
+botfly
+bother
+bottle
+bottom
+boubou
+boucle
+boudin
+bouffe
+boughs
+bought
+bougie
+boules
+boulle
+bounce
+bouncy
+bounds
+bounty
+bourgs
+bourne
+bourns
+bourse
+boused
+bouses
+bouton
+bovids
+bovine
+bowers
+bowery
+bowfin
+bowing
+bowled
+bowleg
+bowler
+bowman
+bowmen
+bowpot
+bowsed
+bowses
+bowwow
+bowyer
+boxcar
+boxers
+boxful
+boxier
+boxily
+boxing
+boyard
+boyars
+boyish
+boylas
+braced
+bracer
+braces
+brachs
+bracts
+braggy
+brahma
+braids
+brails
+brains
+brainy
+braise
+braize
+braked
+brakes
+branch
+brands
+brandy
+branks
+branny
+brants
+brashy
+brasil
+brassy
+bratty
+bravas
+braved
+braver
+braves
+bravos
+brawer
+brawls
+brawly
+brawns
+brawny
+brayed
+brayer
+brazas
+brazed
+brazen
+brazer
+brazes
+brazil
+breach
+breads
+bready
+breaks
+breams
+breath
+bredes
+breech
+breeds
+breeks
+breeze
+breezy
+bregma
+brents
+breves
+brevet
+brewed
+brewer
+brewis
+briard
+briars
+briary
+bribed
+bribee
+briber
+bribes
+bricks
+bricky
+bridal
+brides
+bridge
+bridle
+briefs
+briers
+briery
+bright
+brillo
+brills
+brined
+briner
+brines
+brings
+brinks
+briony
+brises
+brisks
+briths
+britts
+broach
+broads
+broche
+brocks
+brogan
+brogue
+broils
+broken
+broker
+brolly
+bromal
+bromes
+bromic
+bromid
+bromin
+bromos
+bronco
+broncs
+bronze
+bronzy
+brooch
+broods
+broody
+brooks
+brooms
+broomy
+broses
+broths
+brothy
+browed
+browns
+browny
+browse
+brucin
+brughs
+bruins
+bruise
+bruits
+brulot
+brumal
+brumby
+brumes
+brunch
+brunet
+brunts
+brushy
+brutal
+bruted
+brutes
+bruxed
+bruxes
+bryony
+bubale
+bubals
+bubbas
+bubble
+bubbly
+bubkes
+buboed
+buboes
+buccal
+bucked
+bucker
+bucket
+buckle
+buckos
+buckra
+budded
+budder
+buddha
+buddle
+budged
+budger
+budges
+budget
+budgie
+buffed
+buffer
+buffet
+buffos
+bugeye
+bugged
+bugger
+bugled
+bugler
+bugles
+bugout
+bugsha
+builds
+bulbar
+bulbed
+bulbel
+bulbil
+bulbul
+bulged
+bulger
+bulges
+bulgur
+bulked
+bullae
+bulled
+bullet
+bumble
+bumkin
+bummed
+bummer
+bumped
+bumper
+bumphs
+bunchy
+buncos
+bundle
+bundts
+bunged
+bungee
+bungle
+bunion
+bunked
+bunker
+bunkos
+bunkum
+bunted
+bunter
+bunyas
+buoyed
+bupkes
+bupkus
+buppie
+buqsha
+burans
+burble
+burbly
+burbot
+burden
+burdie
+bureau
+burets
+burgee
+burger
+burghs
+burgle
+burgoo
+burial
+buried
+burier
+buries
+burins
+burkas
+burked
+burker
+burkes
+burlap
+burled
+burler
+burley
+burned
+burner
+burnet
+burnie
+burped
+burqas
+burred
+burrer
+burros
+burrow
+bursae
+bursal
+bursar
+bursas
+burses
+bursts
+burton
+busbar
+busboy
+bushed
+bushel
+busher
+bushes
+bushwa
+busied
+busier
+busies
+busily
+busing
+busked
+busker
+buskin
+busman
+busmen
+bussed
+busses
+busted
+buster
+bustic
+bustle
+butane
+butene
+buteos
+butled
+butler
+butles
+butted
+butter
+buttes
+button
+bututs
+butyls
+buyers
+buying
+buyoff
+buyout
+buzuki
+buzzed
+buzzer
+buzzes
+bwanas
+byelaw
+bygone
+bylaws
+byline
+byname
+bypass
+bypast
+bypath
+byplay
+byrled
+byrnie
+byroad
+byssal
+byssus
+bytalk
+byways
+byword
+bywork
+byzant
+cabala
+cabals
+cabana
+cabbed
+cabbie
+cabers
+cabins
+cabled
+cabler
+cables
+cablet
+cabman
+cabmen
+cabobs
+cacaos
+cached
+caches
+cachet
+cachou
+cackle
+cactus
+caddie
+caddis
+cadent
+cadets
+cadged
+cadger
+cadges
+cadmic
+cadres
+caecal
+caecum
+caeoma
+caesar
+caftan
+cagers
+cagier
+cagily
+caging
+cahier
+cahoot
+cahows
+caiman
+caique
+cairds
+cairns
+cairny
+cajole
+cakier
+caking
+calami
+calash
+calcar
+calces
+calcic
+calesa
+calico
+califs
+caliph
+calked
+calker
+calkin
+callan
+callas
+called
+callee
+caller
+callet
+callow
+callus
+calmed
+calmer
+calmly
+calory
+calpac
+calque
+calved
+calves
+calxes
+camail
+camber
+cambia
+camels
+cameos
+camera
+camion
+camisa
+camise
+camlet
+cammie
+camped
+camper
+campos
+campus
+canals
+canape
+canard
+canary
+cancan
+cancel
+cancer
+cancha
+candid
+candle
+candor
+caners
+canful
+cangue
+canids
+canine
+caning
+canker
+cannas
+canned
+cannel
+canner
+cannie
+cannon
+cannot
+canoed
+canoer
+canoes
+canola
+canons
+canopy
+cansos
+cantal
+canted
+canter
+canthi
+cantic
+cantle
+canton
+cantor
+cantos
+cantus
+canula
+canvas
+canyon
+capers
+capful
+capias
+capita
+caplet
+caplin
+capons
+capote
+capped
+capper
+capric
+capris
+capsid
+captan
+captor
+carack
+carafe
+carate
+carats
+carbon
+carbos
+carboy
+carcel
+carded
+carder
+cardia
+cardio
+cardon
+careen
+career
+carers
+caress
+carets
+carful
+cargos
+carhop
+caribe
+caried
+caries
+carina
+caring
+carked
+carles
+carlin
+carman
+carmen
+carnal
+carnet
+carney
+carnie
+carobs
+caroch
+caroli
+carols
+caroms
+carpal
+carped
+carpel
+carper
+carpet
+carpus
+carrel
+carrom
+carrot
+carses
+carted
+cartel
+carter
+cartes
+carton
+cartop
+carved
+carvel
+carven
+carver
+carves
+casaba
+casava
+casbah
+casefy
+caseic
+casein
+casern
+cashaw
+cashed
+cashes
+cashew
+cashoo
+casing
+casini
+casino
+casita
+casked
+casket
+casque
+caster
+castes
+castle
+castor
+casual
+catalo
+catchy
+catena
+caters
+catgut
+cation
+catkin
+catlin
+catnap
+catnip
+catsup
+catted
+cattie
+cattle
+caucus
+caudad
+caudal
+caudex
+caudle
+caught
+caulds
+caules
+caulis
+caulks
+causal
+caused
+causer
+causes
+causey
+caveat
+cavern
+cavers
+caviar
+cavies
+cavils
+caving
+cavity
+cavort
+cawing
+cayman
+cayuse
+ceased
+ceases
+cebids
+ceboid
+cecity
+cedarn
+cedars
+cedary
+ceders
+ceding
+cedula
+ceibas
+ceiled
+ceiler
+ceilis
+celebs
+celery
+celiac
+cellae
+cellar
+celled
+cellos
+celoms
+cement
+cenote
+censed
+censer
+censes
+censor
+census
+centai
+cental
+centas
+center
+centos
+centra
+centre
+centum
+ceorls
+cerate
+cercal
+cercis
+cercus
+cereal
+cereus
+cerias
+cering
+ceriph
+cerise
+cerite
+cerium
+cermet
+cerous
+certes
+ceruse
+cervid
+cervix
+cesium
+cessed
+cesses
+cestas
+cestoi
+cestos
+cestus
+cesura
+cetane
+chabuk
+chacma
+chadar
+chador
+chadri
+chaeta
+chafed
+chafer
+chafes
+chaffs
+chaffy
+chaine
+chains
+chairs
+chaise
+chakra
+chalah
+chaleh
+chalet
+chalks
+chalky
+challa
+chally
+chalot
+chammy
+champs
+champy
+chance
+chancy
+change
+changs
+chants
+chanty
+chapel
+chapes
+charas
+chards
+chared
+chares
+charge
+charka
+charks
+charms
+charro
+charrs
+charry
+charts
+chased
+chaser
+chases
+chasms
+chasmy
+chasse
+chaste
+chatty
+chaunt
+chawed
+chawer
+chazan
+cheapo
+cheaps
+cheats
+chebec
+checks
+cheder
+cheeks
+cheeky
+cheeps
+cheero
+cheers
+cheery
+cheese
+cheesy
+chefed
+chegoe
+chelae
+chelas
+chemic
+chemos
+cheque
+cherry
+cherts
+cherty
+cherub
+chests
+chesty
+chetah
+cheths
+chevre
+chewed
+chewer
+chiasm
+chiaus
+chicas
+chicer
+chichi
+chicks
+chicle
+chicly
+chicos
+chided
+chider
+chides
+chiefs
+chield
+chiels
+chigoe
+childe
+chiles
+chilis
+chilli
+chills
+chilly
+chimar
+chimbs
+chimed
+chimer
+chimes
+chimla
+chimps
+chinas
+chinch
+chined
+chines
+chinks
+chinky
+chinos
+chints
+chintz
+chippy
+chiral
+chirks
+chirms
+chiros
+chirps
+chirpy
+chirre
+chirrs
+chirus
+chisel
+chital
+chitin
+chiton
+chitty
+chives
+chivvy
+choana
+chocks
+choice
+choirs
+choked
+choker
+chokes
+chokey
+cholas
+choler
+cholla
+cholos
+chomps
+chooks
+choose
+choosy
+chopin
+choppy
+choral
+chords
+chorea
+chored
+chores
+choric
+chorus
+chosen
+choses
+chotts
+chough
+chouse
+choush
+chowed
+chowse
+chrism
+chroma
+chrome
+chromo
+chromy
+chubby
+chucks
+chucky
+chufas
+chuffs
+chuffy
+chukar
+chukka
+chummy
+chumps
+chunks
+chunky
+chuppa
+church
+churls
+churns
+churro
+churrs
+chuted
+chutes
+chyles
+chymes
+chymic
+cibols
+cicada
+cicala
+cicale
+cicely
+cicero
+ciders
+cigars
+cilice
+cilium
+cinder
+cinema
+cineol
+cinque
+cipher
+circle
+circus
+cirque
+cirrus
+ciscos
+cisted
+cistus
+citers
+cither
+citied
+cities
+citify
+citing
+citola
+citole
+citral
+citric
+citrin
+citron
+citrus
+civets
+civics
+civies
+civism
+clachs
+clacks
+clades
+claims
+clammy
+clamor
+clamps
+clangs
+clanks
+clanky
+claque
+claret
+claros
+clasps
+claspt
+classy
+clasts
+clause
+claver
+claves
+clavus
+clawed
+clawer
+claxon
+clayed
+clayey
+cleans
+clears
+cleats
+cleave
+cleeks
+clefts
+clench
+cleome
+cleped
+clepes
+clergy
+cleric
+clerid
+clerks
+clever
+clevis
+clewed
+cliche
+clicks
+client
+cliffs
+cliffy
+clifts
+climax
+climbs
+climes
+clinal
+clinch
+clines
+clings
+clingy
+clinic
+clinks
+clique
+cliquy
+clitic
+clivia
+cloaca
+cloaks
+cloche
+clocks
+cloddy
+cloggy
+clomps
+clonal
+cloned
+cloner
+clones
+clonic
+clonks
+clonus
+cloots
+cloque
+closed
+closer
+closes
+closet
+clothe
+cloths
+clotty
+clouds
+cloudy
+clough
+clours
+clouts
+cloven
+clover
+cloves
+clowns
+cloyed
+clozes
+clubby
+clucks
+cluing
+clumps
+clumpy
+clumsy
+clunks
+clunky
+clutch
+clypei
+cnidae
+coacts
+coalas
+coaled
+coaler
+coapts
+coarse
+coasts
+coated
+coatee
+coater
+coatis
+coaxal
+coaxed
+coaxer
+coaxes
+cobalt
+cobber
+cobble
+cobias
+cobles
+cobnut
+cobras
+cobweb
+cocain
+coccal
+coccic
+coccid
+coccus
+coccyx
+cochin
+cocoas
+cocoon
+codded
+codder
+coddle
+codecs
+codeia
+codens
+coders
+codify
+coding
+codlin
+codons
+coedit
+coelom
+coempt
+coerce
+coeval
+coffee
+coffer
+coffin
+coffle
+cogent
+cogged
+cogito
+cognac
+cogons
+cogway
+cohead
+coheir
+cohere
+cohogs
+cohort
+cohosh
+cohost
+cohune
+coifed
+coiffe
+coigne
+coigns
+coiled
+coiler
+coined
+coiner
+coital
+coitus
+cojoin
+coking
+colbys
+colder
+coldly
+colead
+coleus
+colics
+colies
+colins
+collar
+collet
+collie
+collop
+colobi
+cologs
+colone
+coloni
+colons
+colony
+colors
+colour
+colter
+colugo
+column
+colure
+colzas
+comade
+comake
+comate
+combat
+combed
+comber
+combes
+combos
+comedo
+comedy
+comely
+comers
+cometh
+comets
+comfit
+comics
+coming
+comity
+commas
+commie
+commit
+commix
+common
+comose
+comous
+compas
+comped
+compel
+comply
+compos
+compts
+comtes
+concha
+concho
+conchs
+conchy
+concur
+condor
+condos
+coneys
+confab
+confer
+confit
+congas
+congee
+conger
+conges
+congii
+congos
+congou
+conics
+conies
+conine
+coning
+conins
+conium
+conked
+conker
+conned
+conner
+conoid
+consol
+consul
+contes
+contos
+contra
+convex
+convey
+convoy
+coocoo
+cooeed
+cooees
+cooers
+cooeys
+cooing
+cooked
+cooker
+cookey
+cookie
+cooled
+cooler
+coolie
+coolly
+coolth
+coombe
+coombs
+cooped
+cooper
+coopts
+cooter
+cootie
+copalm
+copals
+copays
+copeck
+copens
+copers
+copied
+copier
+copies
+coping
+coplot
+copout
+copped
+copper
+coppra
+coprah
+copras
+copses
+copter
+copula
+coquet
+corals
+corban
+corbel
+corbie
+corded
+corder
+cordon
+corers
+corgis
+coring
+corium
+corked
+corker
+cormel
+cornea
+corned
+cornel
+corner
+cornet
+cornua
+cornus
+corody
+corona
+corpse
+corpus
+corral
+corrie
+corsac
+corses
+corset
+cortex
+cortin
+corvee
+corves
+corvet
+corvid
+corymb
+coryza
+cosecs
+cosets
+coseys
+coshed
+cosher
+coshes
+cosied
+cosier
+cosies
+cosign
+cosily
+cosine
+cosmic
+cosmid
+cosmos
+cosset
+costae
+costal
+costar
+costed
+coster
+costly
+cotans
+coteau
+coting
+cottae
+cottar
+cottas
+cotter
+cotton
+cotype
+cougar
+coughs
+coulee
+coulis
+counts
+county
+couped
+coupes
+couple
+coupon
+course
+courts
+cousin
+couter
+couths
+covary
+covens
+covers
+covert
+covets
+coveys
+coving
+covins
+cowage
+coward
+cowboy
+cowers
+cowier
+cowing
+cowled
+cowman
+cowmen
+cowpat
+cowpea
+cowpie
+cowpox
+cowrie
+coxing
+coydog
+coyest
+coying
+coyish
+coyote
+coypou
+coypus
+cozens
+cozeys
+cozied
+cozier
+cozies
+cozily
+cozzes
+craals
+crabby
+cracks
+cracky
+cradle
+crafts
+crafty
+craggy
+crakes
+crambe
+crambo
+cramps
+crampy
+cranch
+craned
+cranes
+crania
+cranks
+cranky
+cranny
+crapes
+crappy
+crases
+crasis
+cratch
+crated
+crater
+crates
+craton
+cravat
+craved
+craven
+craver
+craves
+crawls
+crawly
+crayon
+crazed
+crazes
+creaks
+creaky
+creams
+creamy
+crease
+creasy
+create
+creche
+credal
+credit
+credos
+creeds
+creeks
+creels
+creeps
+creepy
+creese
+creesh
+cremes
+crenel
+creole
+creped
+crepes
+crepey
+crepon
+cresol
+cressy
+crests
+cresyl
+cretic
+cretin
+crewed
+crewel
+cricks
+criers
+crikey
+crimes
+crimps
+crimpy
+cringe
+crinum
+cripes
+crises
+crisic
+crisis
+crisps
+crispy
+crissa
+crista
+critic
+croaks
+croaky
+crocks
+crocus
+crofts
+crojik
+crones
+crooks
+croons
+crores
+crosse
+crotch
+croton
+crouch
+croupe
+croups
+croupy
+crouse
+croute
+crowds
+crowdy
+crowed
+crower
+crowns
+crozer
+crozes
+cruces
+crucks
+cruddy
+cruder
+crudes
+cruets
+cruise
+crumbs
+crumby
+crummy
+crumps
+crunch
+cruors
+crural
+cruses
+cruset
+crusts
+crusty
+crutch
+cruxes
+crwths
+crying
+crypto
+crypts
+cuatro
+cubage
+cubebs
+cubers
+cubics
+cubing
+cubism
+cubist
+cubiti
+cubits
+cuboid
+cuckoo
+cuddie
+cuddle
+cuddly
+cudgel
+cueing
+cuesta
+cuffed
+cuisse
+culets
+cullay
+culled
+culler
+cullet
+cullis
+culmed
+culpae
+cultch
+cultic
+cultus
+culver
+cumber
+cumbia
+cumins
+cummer
+cummin
+cumuli
+cundum
+cuneal
+cunner
+cupels
+cupful
+cupids
+cupola
+cuppas
+cupped
+cupper
+cupric
+cuprum
+cupula
+cupule
+curacy
+curagh
+curara
+curare
+curari
+curate
+curbed
+curber
+curded
+curdle
+curers
+curets
+curfew
+curiae
+curial
+curies
+curing
+curios
+curite
+curium
+curled
+curler
+curlew
+curran
+curred
+currie
+cursed
+curser
+curses
+cursor
+curtal
+curter
+curtly
+curtsy
+curule
+curved
+curves
+curvet
+curvey
+cuscus
+cusecs
+cushat
+cushaw
+cuspal
+cusped
+cuspid
+cuspis
+cussed
+cusser
+cusses
+cussos
+custom
+custos
+cutely
+cutest
+cutesy
+cuteys
+cuties
+cutins
+cutlas
+cutler
+cutlet
+cutoff
+cutout
+cutter
+cuttle
+cutups
+cuvees
+cyanic
+cyanid
+cyanin
+cyborg
+cycads
+cycled
+cycler
+cycles
+cyclic
+cyclin
+cyclos
+cyders
+cyeses
+cyesis
+cygnet
+cymars
+cymbal
+cymene
+cymlin
+cymoid
+cymols
+cymose
+cymous
+cynics
+cypher
+cypres
+cyprus
+cystic
+cytons
+dabbed
+dabber
+dabble
+dachas
+dacite
+dacker
+dacoit
+dacron
+dactyl
+daddle
+dadgum
+dadoed
+dadoes
+daedal
+daemon
+daffed
+dafter
+daftly
+daggas
+dagger
+daggle
+dagoba
+dagoes
+dahlia
+dahoon
+daiker
+daikon
+daimen
+daimio
+daimon
+daimyo
+dainty
+daises
+dakoit
+dalasi
+daledh
+daleth
+dalles
+dalton
+damage
+damans
+damars
+damask
+dammar
+dammed
+dammer
+dammit
+damned
+damner
+damped
+dampen
+damper
+damply
+damsel
+damson
+danced
+dancer
+dances
+dander
+dandle
+danged
+danger
+dangle
+dangly
+danios
+danish
+danker
+dankly
+daphne
+dapped
+dapper
+dapple
+darbar
+darers
+darics
+daring
+darked
+darken
+darker
+darkey
+darkie
+darkle
+darkly
+darned
+darnel
+darner
+darted
+darter
+dartle
+dashed
+dasher
+dashes
+dashis
+dassie
+datary
+datcha
+daters
+dating
+dative
+dattos
+datums
+datura
+daubed
+dauber
+daubes
+daubry
+daunts
+dauted
+dautie
+davens
+davies
+davits
+dawdle
+dawing
+dawned
+dawted
+dawtie
+daybed
+dayfly
+daylit
+dazing
+dazzle
+deacon
+deaden
+deader
+deadly
+deafen
+deafer
+deafly
+deairs
+dealer
+deaned
+dearer
+dearie
+dearly
+dearth
+deasil
+deaths
+deathy
+deaved
+deaves
+debags
+debark
+debars
+debase
+debate
+debeak
+debits
+debone
+debris
+debtor
+debugs
+debunk
+debuts
+debyes
+decade
+decafs
+decals
+decamp
+decane
+decant
+decare
+decays
+deceit
+decent
+decern
+decide
+decile
+decked
+deckel
+decker
+deckle
+declaw
+decoct
+decode
+decors
+decoys
+decree
+decury
+dedans
+deduce
+deduct
+deeded
+deejay
+deemed
+deepen
+deeper
+deeply
+deewan
+deface
+defame
+defang
+defats
+defeat
+defect
+defend
+defers
+deffer
+defied
+defier
+defies
+defile
+define
+deflea
+defoam
+defogs
+deform
+defrag
+defray
+defter
+deftly
+defuel
+defund
+defuse
+defuze
+degage
+degame
+degami
+degerm
+degree
+degums
+degust
+dehorn
+dehort
+deiced
+deicer
+deices
+deific
+deigns
+deisms
+deists
+deixis
+deject
+dekare
+deking
+dekkos
+delate
+delays
+delead
+delete
+delfts
+delict
+delime
+delish
+delist
+deltas
+deltic
+delude
+deluge
+deluxe
+delved
+delver
+delves
+demand
+demark
+demast
+demean
+dement
+demies
+demise
+demits
+demobs
+demode
+demoed
+demons
+demote
+demure
+demurs
+denari
+denars
+denary
+dengue
+denial
+denied
+denier
+denies
+denims
+denned
+denote
+denser
+dental
+dented
+dentil
+dentin
+denude
+deodar
+depart
+depend
+deperm
+depict
+deploy
+depone
+deport
+depose
+depots
+depths
+depute
+deputy
+derail
+derate
+derats
+derays
+deride
+derive
+dermal
+dermas
+dermic
+dermis
+derris
+desalt
+desand
+descry
+desert
+design
+desire
+desist
+desman
+desmid
+desorb
+desoxy
+despot
+detach
+detail
+detain
+detect
+detent
+deters
+detest
+detick
+detour
+deuced
+deuces
+devein
+devels
+devest
+device
+devils
+devise
+devoid
+devoir
+devons
+devote
+devour
+devout
+dewans
+dewars
+dewier
+dewily
+dewing
+dewlap
+dewool
+deworm
+dexies
+dexter
+dextro
+dezinc
+dharma
+dharna
+dhobis
+dholes
+dhooly
+dhoora
+dhooti
+dhotis
+dhurna
+dhutis
+diacid
+diadem
+dialed
+dialer
+dialog
+diamin
+diaper
+diapir
+diatom
+diazin
+dibbed
+dibber
+dibble
+dibbuk
+dicast
+dicers
+dicier
+dicing
+dicked
+dicker
+dickey
+dickie
+dicots
+dictum
+didact
+diddle
+diddly
+didies
+didoes
+dieing
+dienes
+dieoff
+diesel
+dieses
+diesis
+dieted
+dieter
+differ
+digamy
+digest
+digged
+digger
+dights
+digits
+diglot
+dikdik
+dikers
+diking
+diktat
+dilate
+dildoe
+dildos
+dilled
+dilute
+dimers
+dimity
+dimmed
+dimmer
+dimout
+dimple
+dimply
+dimwit
+dinars
+dindle
+dinero
+diners
+dinged
+dinger
+dinges
+dingey
+dinghy
+dingle
+dingus
+dining
+dinked
+dinkey
+dinkly
+dinkum
+dinned
+dinner
+dinted
+diobol
+diodes
+dioecy
+dioxan
+dioxid
+dioxin
+diplex
+diploe
+dipnet
+dipody
+dipole
+dipped
+dipper
+dipsas
+dipsos
+diquat
+dirams
+dirdum
+direct
+direly
+direst
+dirges
+dirham
+dirked
+dirled
+dirndl
+disarm
+disbar
+disbud
+disced
+discos
+discus
+diseur
+dished
+dishes
+disked
+dismal
+dismay
+dismes
+disown
+dispel
+dissed
+disses
+distal
+distil
+disuse
+dither
+dittos
+ditzes
+diuron
+divans
+divers
+divert
+divest
+divide
+divine
+diving
+divots
+diwans
+dixits
+dizens
+djebel
+djinni
+djinns
+djinny
+doable
+doated
+dobber
+dobbin
+dobies
+doblas
+doblon
+dobras
+dobros
+dobson
+docent
+docile
+docked
+docker
+docket
+doctor
+dodder
+dodged
+dodgem
+dodger
+dodges
+dodoes
+doffed
+doffer
+dogdom
+dogear
+dogeys
+dogged
+dogger
+doggie
+dogies
+dogleg
+dogmas
+dognap
+doiled
+doings
+doited
+doling
+dollar
+dolled
+dollop
+dolman
+dolmas
+dolmen
+dolors
+dolour
+domain
+domine
+doming
+domino
+donate
+donees
+dongas
+dongle
+donjon
+donkey
+donnas
+donned
+donnee
+donors
+donsie
+donuts
+donzel
+doobie
+doodad
+doodle
+doodoo
+doofus
+doolee
+doolie
+doomed
+doowop
+doozer
+doozie
+dopant
+dopers
+dopier
+dopily
+doping
+dorado
+dorbug
+dories
+dormer
+dormie
+dormin
+dorper
+dorsad
+dorsal
+dorsel
+dorser
+dorsum
+dosage
+dosers
+dosing
+dossal
+dossed
+dossel
+dosser
+dosses
+dossil
+dotage
+dotard
+doters
+dotier
+doting
+dotted
+dottel
+dotter
+dottle
+double
+doubly
+doubts
+douche
+doughs
+dought
+doughy
+doulas
+doumas
+dourah
+douras
+dourer
+dourly
+doused
+douser
+douses
+dovens
+dovish
+dowels
+dowers
+dowery
+dowing
+downed
+downer
+dowsed
+dowser
+dowses
+doxies
+doyens
+doyley
+dozens
+dozers
+dozier
+dozily
+dozing
+drably
+drachm
+draffs
+draffy
+drafts
+drafty
+dragee
+draggy
+dragon
+drails
+drains
+drakes
+dramas
+drawee
+drawer
+drawls
+drawly
+drayed
+dreads
+dreams
+dreamt
+dreamy
+drears
+dreary
+drecks
+drecky
+dredge
+dreggy
+dreich
+dreidl
+dreigh
+drench
+dressy
+driegh
+driers
+driest
+drifts
+drifty
+drills
+drinks
+drippy
+drivel
+driven
+driver
+drives
+drogue
+droids
+droits
+drolls
+drolly
+dromon
+droned
+droner
+drones
+drongo
+drools
+drooly
+droops
+droopy
+dropsy
+drosky
+drossy
+drouks
+drouth
+droved
+drover
+droves
+drownd
+drowns
+drowse
+drowsy
+drudge
+druggy
+druids
+drumly
+drunks
+drupes
+druses
+dryads
+dryers
+dryest
+drying
+dryish
+drylot
+dually
+dubbed
+dubber
+dubbin
+ducats
+ducked
+ducker
+duckie
+ductal
+ducted
+duddie
+dudeen
+duding
+dudish
+dueled
+dueler
+duelli
+duello
+duende
+duenna
+dueted
+duffel
+duffer
+duffle
+dugong
+dugout
+duiker
+duking
+dulcet
+dulias
+dulled
+duller
+dulses
+dumbed
+dumber
+dumbly
+dumbos
+dumdum
+dumped
+dumper
+dunams
+dunces
+dunged
+dunite
+dunked
+dunker
+dunlin
+dunned
+dunner
+dunted
+duolog
+duomos
+dupers
+dupery
+duping
+duplex
+dupped
+durbar
+duress
+durian
+during
+durion
+durned
+durocs
+durras
+durrie
+durums
+dusked
+dusted
+duster
+dustup
+duties
+duvets
+dwarfs
+dweebs
+dweeby
+dwells
+dwined
+dwines
+dyable
+dyadic
+dybbuk
+dyeing
+dyings
+dyking
+dynamo
+dynast
+dynein
+dynels
+dynode
+dyvour
+eagers
+eagled
+eagles
+eaglet
+eagres
+earbud
+earful
+earing
+earlap
+earned
+earner
+earths
+earthy
+earwax
+earwig
+easels
+easier
+easies
+easily
+easing
+easter
+eaters
+eatery
+eating
+ebbets
+ebbing
+ebooks
+ecarte
+ecesic
+ecesis
+echard
+eching
+echini
+echoed
+echoer
+echoes
+echoey
+echoic
+eclair
+eclats
+ectype
+eczema
+eddied
+eddies
+eddoes
+edemas
+edenic
+edgers
+edgier
+edgily
+edging
+edible
+edicts
+ediles
+edited
+editor
+educed
+educes
+educts
+eelier
+eerier
+eerily
+efface
+effect
+effete
+effigy
+efflux
+effort
+effuse
+egesta
+egests
+eggars
+eggcup
+eggers
+egging
+eggnog
+egises
+egoism
+egoist
+egress
+egrets
+eiders
+eidola
+eighth
+eights
+eighty
+eikons
+either
+ejecta
+ejects
+ekuele
+elains
+elands
+elapid
+elapse
+elated
+elater
+elates
+elbows
+elders
+eldest
+elects
+elegit
+elemis
+eleven
+elevon
+elfins
+elfish
+elicit
+elided
+elides
+elints
+elites
+elixir
+elmier
+elodea
+eloign
+eloins
+eloped
+eloper
+elopes
+eluant
+eluate
+eluded
+eluder
+eludes
+eluent
+eluted
+elutes
+eluvia
+elvers
+elvish
+elytra
+emails
+embalm
+embank
+embark
+embars
+embays
+embeds
+embers
+emblem
+embody
+emboli
+emboly
+embosk
+emboss
+embows
+embrue
+embryo
+emceed
+emcees
+emdash
+emeers
+emends
+emerge
+emerod
+emeses
+emesis
+emetic
+emetin
+emeute
+emigre
+emmers
+emmets
+emodin
+emoted
+emoter
+emotes
+empale
+empery
+empire
+employ
+emydes
+enable
+enacts
+enamel
+enamor
+enates
+enatic
+encage
+encamp
+encase
+encash
+encina
+encode
+encore
+encyst
+endash
+endear
+enders
+ending
+endite
+endive
+endows
+endrin
+endued
+endues
+endure
+enduro
+energy
+enface
+enfold
+engage
+engild
+engine
+engird
+engirt
+englut
+engram
+engulf
+enhalo
+enigma
+enisle
+enjoin
+enjoys
+enlace
+enlist
+enmesh
+enmity
+ennead
+ennuis
+ennuye
+enokis
+enolic
+enosis
+enough
+enrage
+enrapt
+enrich
+enrobe
+enroll
+enrols
+enroot
+enserf
+ensign
+ensile
+ensoul
+ensued
+ensues
+ensure
+entail
+entera
+enters
+entice
+entire
+entity
+entoil
+entomb
+entrap
+entree
+enured
+enures
+envied
+envier
+envies
+enviro
+envois
+envoys
+enwind
+enwomb
+enwrap
+enzyme
+enzyms
+eocene
+eolian
+eolith
+eonian
+eonism
+eosine
+eosins
+epacts
+eparch
+ephahs
+ephebe
+ephebi
+ephods
+ephori
+ephors
+epical
+epigon
+epilog
+epimer
+epizoa
+epochs
+epodes
+eponym
+epopee
+eposes
+equals
+equate
+equids
+equine
+equips
+equity
+erased
+eraser
+erases
+erbium
+erects
+erenow
+ergate
+ergots
+ericas
+eringo
+ermine
+eroded
+erodes
+eroses
+erotic
+errand
+errant
+errata
+erring
+errors
+ersatz
+eructs
+erugos
+erupts
+ervils
+eryngo
+escape
+escarp
+escars
+eschar
+eschew
+escort
+escots
+escrow
+escudo
+eskars
+eskers
+espial
+espied
+espies
+esprit
+essays
+essoin
+estate
+esteem
+esters
+estops
+estral
+estray
+estrin
+estrum
+estrus
+etalon
+etamin
+etapes
+etched
+etcher
+etches
+eterne
+ethane
+ethene
+ethers
+ethics
+ethion
+ethnic
+ethnos
+ethoxy
+ethyls
+ethyne
+etoile
+etudes
+etwees
+etymon
+euchre
+eulogy
+eunuch
+eupnea
+eureka
+euripi
+euroky
+eutaxy
+evaded
+evader
+evades
+evened
+evener
+evenly
+events
+everts
+evicts
+eviler
+evilly
+evince
+evited
+evites
+evoked
+evoker
+evokes
+evolve
+evulse
+evzone
+exacta
+exacts
+exalts
+examen
+exarch
+exceed
+excels
+except
+excess
+excide
+excise
+excite
+excuse
+exedra
+exempt
+exequy
+exerts
+exeunt
+exhale
+exhort
+exhume
+exiled
+exiler
+exiles
+exilic
+exines
+exists
+exited
+exodoi
+exodos
+exodus
+exogen
+exonic
+exonym
+exotic
+expand
+expats
+expect
+expels
+expend
+expert
+expire
+expiry
+export
+expose
+exsect
+exsert
+extant
+extend
+extent
+extern
+extoll
+extols
+extort
+extras
+exuded
+exudes
+exults
+exurbs
+exuvia
+eyases
+eyebar
+eyecup
+eyeful
+eyeing
+eyelet
+eyelid
+eyries
+fabber
+fabled
+fabler
+fables
+fabric
+facade
+facers
+facete
+facets
+faceup
+facial
+facile
+facing
+factor
+facula
+fadein
+faders
+fading
+faenas
+faerie
+failed
+faille
+fainer
+faints
+faired
+fairer
+fairly
+faiths
+fajita
+fakeer
+fakers
+fakery
+faking
+fakirs
+falces
+falcon
+fallal
+fallen
+faller
+fallow
+falser
+falsie
+falter
+family
+famine
+faming
+famish
+famous
+famuli
+fandom
+fanega
+fanfic
+fangas
+fanged
+fanion
+fanjet
+fanned
+fanner
+fanons
+fantod
+fantom
+fanums
+faqirs
+faquir
+farads
+farced
+farcer
+farces
+farcie
+farded
+fardel
+farers
+farfal
+farfel
+farina
+faring
+farles
+farmed
+farmer
+farrow
+farted
+fasces
+fascia
+fashed
+fashes
+fasted
+fasten
+faster
+father
+fathom
+fating
+fatwas
+faucal
+fauces
+faucet
+faulds
+faults
+faulty
+faunae
+faunal
+faunas
+fauves
+favela
+favism
+favors
+favour
+fawned
+fawner
+faxing
+faying
+fazing
+fealty
+feared
+fearer
+feased
+feases
+feasts
+feater
+featly
+feazed
+feazes
+feckly
+fecund
+fedora
+feeble
+feebly
+feeder
+feeing
+feeler
+feezed
+feezes
+feigns
+feijoa
+feints
+feirie
+feists
+feisty
+felids
+feline
+fellah
+fellas
+felled
+feller
+felloe
+fellow
+felons
+felony
+felsic
+felted
+female
+femmes
+femora
+femurs
+fenced
+fencer
+fences
+fended
+fender
+fennec
+fennel
+feoffs
+ferals
+ferbam
+feriae
+ferial
+ferias
+ferine
+ferity
+ferlie
+fermis
+ferrel
+ferret
+ferric
+ferrum
+ferula
+ferule
+fervid
+fervor
+fescue
+fessed
+fesses
+festal
+fester
+fetial
+fetich
+feting
+fetish
+fetors
+fetted
+fetter
+fettle
+feuars
+feudal
+feuded
+feuing
+fevers
+fewest
+feyest
+fezzed
+fezzes
+fiacre
+fiance
+fiasco
+fibbed
+fibber
+fibers
+fibres
+fibril
+fibrin
+fibula
+fiches
+fichus
+ficins
+fickle
+fickly
+ficoes
+fiddle
+fiddly
+fidged
+fidges
+fidget
+fields
+fiends
+fierce
+fiesta
+fifers
+fifing
+fifths
+figged
+fights
+figure
+filers
+filets
+filial
+filing
+filled
+filler
+filles
+fillet
+fillip
+fillos
+filmed
+filmer
+filmic
+filmis
+filose
+filter
+filths
+filthy
+fimble
+finale
+finals
+fincas
+finder
+finely
+finery
+finest
+finger
+finial
+fining
+finish
+finite
+finito
+finked
+finned
+fiords
+fipple
+fiques
+firers
+firing
+firkin
+firman
+firmed
+firmer
+firmly
+firsts
+firths
+fiscal
+fished
+fisher
+fishes
+fisted
+fistic
+fitchy
+fitful
+fitted
+fitter
+fivers
+fixate
+fixers
+fixing
+fixity
+fixure
+fizgig
+fizzed
+fizzer
+fizzes
+fizzle
+fjelds
+fjords
+flabby
+flacks
+flacon
+flaggy
+flagon
+flails
+flairs
+flaked
+flaker
+flakes
+flakey
+flambe
+flamed
+flamen
+flamer
+flames
+flanes
+flange
+flanks
+flappy
+flared
+flares
+flashy
+flasks
+flatly
+flatus
+flaunt
+flauta
+flavin
+flavor
+flawed
+flaxen
+flaxes
+flayed
+flayer
+fleams
+fleche
+flecks
+flecky
+fledge
+fledgy
+fleece
+fleech
+fleecy
+fleers
+fleets
+flench
+flense
+fleshy
+fletch
+fleury
+flexed
+flexes
+flexor
+fleyed
+flicks
+fliers
+fliest
+flight
+flimsy
+flinch
+flings
+flints
+flinty
+flippy
+flirts
+flirty
+flitch
+flited
+flites
+floats
+floaty
+flocci
+flocks
+flocky
+flongs
+floods
+flooey
+flooie
+floors
+floosy
+floozy
+floppy
+florae
+floral
+floras
+floret
+florid
+florin
+flossy
+flotas
+flours
+floury
+flouts
+flowed
+flower
+fluent
+fluffs
+fluffy
+fluids
+fluish
+fluked
+flukes
+flukey
+flumed
+flumes
+flumps
+flunks
+flunky
+fluors
+flurry
+fluted
+fluter
+flutes
+flutey
+fluxed
+fluxes
+fluyts
+flyboy
+flybys
+flyers
+flying
+flyman
+flymen
+flyoff
+flysch
+flyted
+flytes
+flyway
+foaled
+foamed
+foamer
+fobbed
+fodder
+fodgel
+foehns
+foeman
+foemen
+foetal
+foetid
+foetor
+foetus
+fogbow
+fogdog
+fogeys
+fogged
+fogger
+fogies
+foible
+foiled
+foined
+foison
+foists
+folate
+folded
+folder
+foldup
+foleys
+foliar
+folios
+folium
+folkie
+folksy
+folles
+follis
+follow
+foment
+fomite
+fonded
+fonder
+fondle
+fondly
+fondue
+fondus
+fontal
+foodie
+fooled
+footed
+footer
+footie
+footle
+footsy
+foozle
+fopped
+forage
+forams
+forays
+forbad
+forbid
+forbye
+forced
+forcer
+forces
+forded
+fordid
+foreby
+foredo
+forego
+forest
+forgat
+forged
+forger
+forges
+forget
+forgot
+forint
+forked
+forker
+formal
+format
+formed
+formee
+former
+formes
+formic
+formol
+formyl
+fornix
+forrit
+fortes
+fortis
+forums
+forwhy
+fossae
+fossas
+fosses
+fossil
+foster
+fought
+fouled
+fouler
+foully
+founds
+founts
+fourth
+foveae
+foveal
+foveas
+fowled
+fowler
+foxier
+foxily
+foxing
+foyers
+fozier
+fracas
+fracti
+fraena
+frails
+fraise
+framed
+framer
+frames
+francs
+franks
+frappe
+frater
+frauds
+frayed
+frazil
+freaks
+freaky
+freely
+freers
+freest
+freeze
+french
+frenum
+frenzy
+freres
+fresco
+fretty
+friars
+friary
+fridge
+friend
+friers
+frieze
+friges
+fright
+frigid
+frijol
+frills
+frilly
+fringe
+fringy
+frisee
+frises
+frisks
+frisky
+frites
+friths
+fritts
+frivol
+frized
+frizer
+frizes
+frizzy
+frocks
+froggy
+frolic
+fronds
+fronts
+frosts
+frosty
+froths
+frothy
+frouzy
+frowns
+frowst
+frowsy
+frowzy
+frozen
+frugal
+fruits
+fruity
+frumps
+frumpy
+frusta
+fryers
+frying
+frypan
+fubbed
+fucoid
+fucose
+fucous
+fuddle
+fudged
+fudges
+fueled
+fueler
+fugato
+fugged
+fugios
+fugled
+fugles
+fugued
+fugues
+fuhrer
+fulcra
+fulfil
+fulgid
+fulham
+fullam
+fulled
+fuller
+fulmar
+fumble
+fumers
+fumets
+fumier
+fuming
+fumuli
+funded
+funder
+fundic
+fundus
+funest
+fungal
+fungic
+fungus
+funked
+funker
+funkia
+funned
+funnel
+funner
+furane
+furans
+furfur
+furies
+furled
+furler
+furore
+furors
+furred
+furrow
+furzes
+fusain
+fusees
+fusels
+fusile
+fusils
+fusing
+fusion
+fussed
+fusser
+fusses
+fustic
+fusuma
+futile
+futons
+future
+futzed
+futzes
+fuzees
+fuzils
+fuzing
+fuzzed
+fuzzes
+fylfot
+fynbos
+fyttes
+gabbed
+gabber
+gabble
+gabbro
+gabies
+gabion
+gabled
+gables
+gaboon
+gadded
+gadder
+gaddis
+gadfly
+gadget
+gadids
+gadoid
+gaeing
+gaffed
+gaffer
+gaffes
+gagaku
+gagers
+gagged
+gagger
+gaggle
+gaging
+gagman
+gagmen
+gaiety
+gaijin
+gained
+gainer
+gainly
+gainst
+gaited
+gaiter
+galago
+galahs
+galaxy
+galeae
+galeas
+galena
+galere
+galiot
+galled
+gallet
+galley
+gallic
+gallon
+gallop
+gallus
+galoot
+galops
+galore
+galosh
+galyac
+galyak
+gamays
+gambas
+gambes
+gambia
+gambir
+gambit
+gamble
+gambol
+gamely
+gamers
+gamest
+gamete
+gamier
+gamily
+gamine
+gaming
+gamins
+gammas
+gammed
+gammer
+gammon
+gamuts
+gander
+ganefs
+ganevs
+ganged
+ganger
+gangly
+gangue
+ganjah
+ganjas
+gannet
+ganofs
+ganoid
+gantry
+gaoled
+gaoler
+gapers
+gaping
+gapped
+garage
+garbed
+garble
+garcon
+gardai
+garden
+garget
+gargle
+garish
+garlic
+garner
+garnet
+garote
+garred
+garret
+garron
+garter
+garths
+garvey
+gasbag
+gascon
+gashed
+gasher
+gashes
+gasify
+gasket
+gaskin
+gaslit
+gasman
+gasmen
+gasped
+gasper
+gassed
+gasser
+gasses
+gasted
+gaster
+gateau
+gaters
+gather
+gating
+gators
+gauche
+gaucho
+gauged
+gauger
+gauges
+gaults
+gaumed
+gauzes
+gavage
+gavels
+gavial
+gavots
+gawked
+gawker
+gawped
+gawper
+gawsie
+gayals
+gaydar
+gayest
+gayety
+gazabo
+gazars
+gazebo
+gazers
+gazing
+gazoos
+gazump
+geared
+gecked
+geckos
+geegaw
+geeing
+geeked
+geests
+geezer
+geisha
+gelada
+gelant
+gelate
+gelati
+gelato
+gelcap
+gelded
+gelder
+gelees
+gelled
+gemmae
+gemmed
+gemote
+gemots
+gender
+genera
+genets
+geneva
+genial
+genies
+genips
+genius
+genoas
+genome
+genoms
+genres
+genros
+gentes
+gentil
+gentle
+gently
+gentoo
+gentry
+geodes
+geodic
+geoids
+gerahs
+gerbil
+gerent
+german
+germen
+gerund
+gestes
+gestic
+getter
+getups
+gewgaw
+geyser
+gharri
+gharry
+ghauts
+ghazis
+gherao
+ghetto
+ghibli
+ghosts
+ghosty
+ghouls
+ghylls
+giants
+giaour
+gibbed
+gibber
+gibbet
+gibbon
+gibers
+gibing
+giblet
+gibson
+giddap
+gieing
+gifted
+giftee
+gigged
+giggle
+giggly
+giglet
+giglot
+gigolo
+gigots
+gigues
+gilded
+gilder
+gilled
+giller
+gillie
+gimbal
+gimels
+gimlet
+gimmal
+gimmes
+gimmie
+gimped
+gingal
+ginger
+gingko
+ginkgo
+ginned
+ginner
+gipons
+gipped
+gipper
+girded
+girder
+girdle
+girlie
+girned
+girons
+girted
+girths
+gismos
+gitano
+gitted
+gittin
+givens
+givers
+giving
+gizmos
+glaces
+glacis
+glades
+gladly
+glaire
+glairs
+glairy
+glaive
+glamor
+glance
+glands
+glared
+glares
+glassy
+glazed
+glazer
+glazes
+gleams
+gleamy
+gleans
+glebae
+glebes
+gledes
+gleeds
+gleeks
+gleets
+gleety
+glegly
+gleyed
+glibly
+glided
+glider
+glides
+gliffs
+glimed
+glimes
+glints
+glinty
+glioma
+glitch
+glitzy
+gloams
+gloats
+global
+globby
+globed
+globes
+globin
+gloggs
+glomus
+glooms
+gloomy
+gloppy
+gloria
+glossa
+glossy
+glosts
+glouts
+gloved
+glover
+gloves
+glowed
+glower
+glozed
+glozes
+glucan
+gluers
+gluier
+gluily
+gluing
+glumes
+glumly
+glumpy
+glunch
+gluons
+glutei
+gluten
+glutes
+glycan
+glycin
+glycol
+glycyl
+glyphs
+gnarls
+gnarly
+gnarrs
+gnatty
+gnawed
+gnawer
+gneiss
+gnomes
+gnomic
+gnomon
+gnoses
+gnosis
+goaded
+goaled
+goalie
+goanna
+goatee
+gobang
+gobans
+gobbed
+gobbet
+gobble
+gobies
+goblet
+goblin
+goboes
+gobony
+goddam
+godded
+godets
+godown
+godson
+godwit
+gofers
+goffer
+goggle
+goggly
+goglet
+goings
+goiter
+goitre
+golden
+golder
+golems
+golfed
+golfer
+golosh
+gombos
+gomers
+gomuti
+gonefs
+goners
+gonged
+goniff
+gonifs
+gonion
+gonium
+gonofs
+gonoph
+goodby
+goodie
+goodly
+goofed
+googly
+googol
+gooier
+gooney
+goonie
+gooral
+goosed
+gooses
+goosey
+gopher
+gorals
+gorged
+gorger
+gorges
+gorget
+gorgon
+gorhen
+gorier
+gorily
+goring
+gormed
+gorses
+gospel
+gossan
+gossip
+gotcha
+gothic
+gotten
+gouged
+gouger
+gouges
+gourde
+gourds
+govern
+gowans
+gowany
+gowned
+goyish
+graals
+grabby
+graben
+graced
+graces
+graded
+grader
+grades
+gradin
+gradus
+grafts
+graham
+grails
+grains
+grainy
+gramas
+gramma
+gramme
+grampa
+gramps
+grands
+grange
+granny
+grants
+granum
+grapes
+grapey
+graphs
+grappa
+grasps
+grassy
+grated
+grater
+grates
+gratin
+gratis
+graved
+gravel
+graven
+graver
+graves
+gravid
+grayed
+grayer
+grayly
+grazed
+grazer
+grazes
+grease
+greasy
+greats
+greave
+grebes
+greeds
+greedy
+greens
+greeny
+greets
+gregos
+greige
+gremmy
+greyed
+greyer
+greyly
+grided
+grides
+griefs
+grieve
+griffe
+griffs
+grifts
+grigri
+grille
+grills
+grilse
+grimed
+grimes
+grimly
+grinch
+grinds
+gringa
+gringo
+griots
+griped
+griper
+gripes
+gripey
+grippe
+grippy
+grisly
+grison
+grists
+griths
+gritty
+grivet
+groans
+groats
+grocer
+groggy
+groins
+grooms
+groove
+groovy
+groped
+groper
+gropes
+grosze
+groszy
+grotto
+grotty
+grouch
+ground
+groups
+grouse
+grouts
+grouty
+groved
+grovel
+groves
+grower
+growls
+growly
+growth
+groyne
+grubby
+grudge
+gruels
+gruffs
+gruffy
+grugru
+grumes
+grumps
+grumpy
+grunge
+grungy
+grunts
+grutch
+guacos
+guaiac
+guanay
+guanin
+guanos
+guards
+guavas
+guenon
+guests
+guffaw
+guggle
+guglet
+guided
+guider
+guides
+guidon
+guilds
+guiled
+guiles
+guilts
+guilty
+guimpe
+guinea
+guiros
+guised
+guises
+guitar
+gulags
+gulden
+gulfed
+gulled
+gullet
+gulley
+gulped
+gulper
+gumbos
+gummas
+gummed
+gummer
+gundog
+gunite
+gunman
+gunmen
+gunned
+gunnel
+gunnen
+gunner
+gunsel
+gurged
+gurges
+gurgle
+gurnet
+gurney
+gushed
+gusher
+gushes
+gusset
+gussie
+gusted
+guttae
+gutted
+gutter
+guttle
+guying
+guyots
+guzzle
+gweduc
+gybing
+gyozas
+gypped
+gypper
+gypsum
+gyrase
+gyrate
+gyrene
+gyring
+gyrons
+gyrose
+gyttja
+gyving
+habile
+habits
+haboob
+haceks
+hacked
+hackee
+hacker
+hackie
+hackle
+hackly
+hading
+hadith
+hadjee
+hadjes
+hadjis
+hadron
+haeing
+haemal
+haemic
+haemin
+haeres
+haffet
+haffit
+hafted
+hafter
+hagbut
+hagdon
+hagged
+haggis
+haggle
+haikus
+hailed
+hailer
+haints
+hairdo
+haired
+hajjes
+hajjis
+hakeem
+hakims
+halala
+halals
+halers
+haleru
+halest
+halide
+halids
+haling
+halite
+hallah
+hallal
+hallel
+halloa
+halloo
+hallos
+hallot
+hallow
+hallux
+halmas
+haloed
+haloes
+haloid
+halons
+halted
+halter
+halutz
+halvah
+halvas
+halved
+halves
+hamada
+hamals
+hamate
+hamaul
+hamlet
+hammal
+hammam
+hammed
+hammer
+hamper
+hamuli
+hamzah
+hamzas
+hances
+handax
+handed
+hander
+handle
+hangar
+hanged
+hanger
+hangul
+hangup
+haniwa
+hanked
+hanker
+hankie
+hansas
+hansel
+hanses
+hansom
+hanted
+hantle
+haoles
+happed
+happen
+hapten
+haptic
+harbor
+harden
+harder
+hardly
+hareem
+harems
+haring
+harked
+harken
+harlot
+harmed
+harmer
+harmin
+harped
+harper
+harpin
+harrow
+hartal
+hashed
+hashes
+haslet
+hasped
+hassel
+hassle
+hasted
+hasten
+hastes
+hatbox
+haters
+hatful
+hating
+hatpin
+hatred
+hatted
+hatter
+haughs
+hauled
+hauler
+haulms
+haulmy
+haunch
+haunts
+hausen
+havens
+havers
+having
+havior
+havocs
+hawala
+hawing
+hawked
+hawker
+hawkey
+hawkie
+hawser
+hawses
+hayers
+haying
+haymow
+hazans
+hazard
+hazels
+hazers
+hazier
+hazily
+hazing
+hazmat
+hazzan
+headed
+header
+healed
+healer
+health
+heaped
+heaper
+hearer
+hearse
+hearth
+hearts
+hearty
+heated
+heater
+heaths
+heathy
+heaume
+heaved
+heaven
+heaver
+heaves
+heckle
+hectic
+hector
+heddle
+heders
+hedged
+hedger
+hedges
+heeded
+heeder
+heehaw
+heeled
+heeler
+heezed
+heezes
+hefted
+hefter
+hegari
+hegira
+heifer
+height
+heiled
+heinie
+heired
+heishi
+heists
+hejira
+heliac
+helios
+helium
+helled
+heller
+hellos
+helmed
+helmet
+helots
+helped
+helper
+helved
+helves
+hemins
+hemmed
+hemmer
+hemoid
+hempen
+hempie
+henbit
+henges
+henley
+hennas
+henrys
+hented
+hepcat
+hepper
+heptad
+herald
+herbal
+herbed
+herded
+herder
+herdic
+hereat
+hereby
+herein
+hereof
+hereon
+heresy
+hereto
+heriot
+hermae
+hermai
+hermit
+hernia
+heroes
+heroic
+heroin
+herons
+herpes
+hetero
+hetman
+heuchs
+heughs
+hewers
+hewing
+hexade
+hexads
+hexane
+hexers
+hexing
+hexone
+hexose
+hexyls
+heyday
+heydey
+hiatal
+hiatus
+hiccup
+hickey
+hickie
+hidden
+hiders
+hiding
+hieing
+hiemal
+higgle
+higher
+highly
+highth
+hights
+hijabs
+hijack
+hijrah
+hijras
+hikers
+hiking
+hilled
+hiller
+hilloa
+hillos
+hilted
+hinder
+hinged
+hinger
+hinges
+hinted
+hinter
+hipped
+hipper
+hippie
+hippos
+hirees
+hirers
+hiring
+hirple
+hirsel
+hirsle
+hispid
+hissed
+hisser
+hisses
+histed
+hither
+hitman
+hitmen
+hitter
+hiving
+hoagie
+hoards
+hoarse
+hoaxed
+hoaxer
+hoaxes
+hobbed
+hobber
+hobbit
+hobble
+hobnob
+hoboed
+hoboes
+hocked
+hocker
+hockey
+hodads
+hodden
+hoddin
+hoeing
+hogans
+hogged
+hogger
+hogget
+hognut
+hogtie
+hoicks
+hoiden
+hoised
+hoises
+hoists
+hokier
+hokily
+hoking
+hokums
+holard
+holden
+holder
+holdup
+holier
+holies
+holily
+holing
+holism
+holist
+holked
+hollas
+holler
+holloa
+holloo
+hollos
+hollow
+holmic
+holpen
+homage
+hombre
+homely
+homers
+homeys
+homier
+homies
+homily
+homing
+hominy
+hommos
+honans
+honcho
+hondas
+hondle
+honers
+honest
+honeys
+honied
+honing
+honked
+honker
+honkey
+honkie
+honors
+honour
+hooded
+hoodie
+hoodoo
+hooeys
+hoofed
+hoofer
+hookah
+hookas
+hooked
+hooker
+hookey
+hookup
+hoolie
+hooped
+hooper
+hoopla
+hoopoe
+hoopoo
+hoorah
+hooray
+hootch
+hooted
+hooter
+hooved
+hoover
+hooves
+hopers
+hoping
+hopped
+hopper
+hopple
+horahs
+horary
+horded
+hordes
+horned
+hornet
+horrid
+horror
+horsed
+horses
+horsey
+horste
+horsts
+hosels
+hosers
+hoseys
+hosier
+hosing
+hostas
+hosted
+hostel
+hostly
+hotbed
+hotbox
+hotdog
+hotels
+hotrod
+hotted
+hotter
+hottie
+houdah
+hounds
+houris
+hourly
+housed
+housel
+houser
+houses
+hovels
+hovers
+howdah
+howdie
+howffs
+howked
+howled
+howler
+howlet
+hoyden
+hoyles
+hryvna
+hubbly
+hubbub
+hubcap
+hubris
+huckle
+huddle
+huffed
+hugely
+hugest
+hugged
+hugger
+huipil
+hulked
+hulled
+huller
+hulloa
+hulloo
+hullos
+humane
+humans
+humate
+humble
+humbly
+humbug
+humeri
+hummed
+hummer
+hummus
+humors
+humour
+humped
+humper
+humphs
+humvee
+hunger
+hungry
+hunker
+hunkey
+hunkie
+hunted
+hunter
+huppah
+hurdle
+hurled
+hurler
+hurley
+hurrah
+hurray
+hursts
+hurter
+hurtle
+hushed
+hushes
+husked
+husker
+hussar
+hustle
+hutted
+hutzpa
+huzzah
+huzzas
+hyaena
+hyalin
+hybrid
+hybris
+hydrae
+hydras
+hydria
+hydric
+hydrid
+hydros
+hyenas
+hyenic
+hyetal
+hymens
+hymnal
+hymned
+hyoids
+hypers
+hyphae
+hyphal
+hyphen
+hyping
+hypnic
+hypoed
+hysons
+hyssop
+iambic
+iambus
+iatric
+ibexes
+ibices
+ibidem
+ibises
+icebox
+icecap
+iceman
+icemen
+ichors
+icicle
+iciest
+icings
+ickers
+ickier
+ickily
+icones
+iconic
+ideals
+ideate
+idiocy
+idioms
+idiots
+idlers
+idlest
+idling
+idylls
+iffier
+igging
+igloos
+ignify
+ignite
+ignore
+iguana
+ihrams
+ilexes
+iliads
+illest
+illite
+illude
+illume
+imaged
+imager
+images
+imagos
+imaret
+imaums
+imbalm
+imbark
+imbeds
+imbibe
+imbody
+imbrue
+imbued
+imbues
+imides
+imidic
+imines
+immane
+immesh
+immies
+immune
+immure
+impact
+impair
+impala
+impale
+impark
+impart
+impawn
+impede
+impels
+impend
+imphee
+imping
+impish
+impled
+impone
+import
+impose
+impost
+improv
+impugn
+impure
+impute
+inaner
+inanes
+inarch
+inarms
+inborn
+inbred
+incage
+incant
+incase
+incent
+incept
+incest
+inched
+incher
+inches
+incise
+incite
+inclip
+incogs
+income
+incony
+incubi
+incult
+incurs
+incuse
+indaba
+indeed
+indene
+indent
+indict
+indies
+indign
+indigo
+indite
+indium
+indole
+indols
+indoor
+indows
+indris
+induce
+induct
+indued
+indues
+indult
+inerts
+infall
+infamy
+infant
+infare
+infect
+infers
+infest
+infill
+infirm
+inflow
+influx
+infold
+inform
+infuse
+ingate
+ingest
+ingles
+ingots
+ingulf
+inhale
+inhaul
+inhere
+inhume
+inions
+inject
+injure
+injury
+inkers
+inkier
+inking
+inkjet
+inkles
+inkpot
+inlace
+inlaid
+inland
+inlays
+inlets
+inlier
+inmate
+inmesh
+inmost
+innage
+innate
+inners
+inning
+inpour
+inputs
+inroad
+inruns
+inrush
+insane
+inseam
+insect
+insert
+insets
+inside
+insist
+insole
+insoul
+inspan
+instal
+instar
+instep
+instil
+insult
+insure
+intact
+intake
+intend
+intent
+intern
+inters
+intima
+intime
+intine
+intomb
+intone
+intort
+intown
+intron
+intros
+intuit
+inturn
+inulin
+inured
+inures
+inurns
+invade
+invars
+invent
+invert
+invest
+invite
+invoke
+inwall
+inward
+inwind
+inwove
+inwrap
+iodate
+iodide
+iodids
+iodine
+iodins
+iodise
+iodism
+iodize
+iodous
+iolite
+ionics
+ionise
+ionium
+ionize
+ionone
+ipecac
+irades
+irater
+ireful
+irenic
+irides
+iridic
+irised
+irises
+iritic
+iritis
+irking
+irokos
+ironed
+ironer
+irones
+ironic
+irreal
+irrupt
+isatin
+ischia
+island
+islets
+isling
+isobar
+isogon
+isohel
+isolog
+isomer
+isopod
+isseis
+issued
+issuer
+issues
+isthmi
+istles
+italic
+itched
+itches
+itemed
+iterum
+itself
+ixodid
+ixoras
+ixtles
+izzard
+jabbed
+jabber
+jabiru
+jabots
+jacals
+jacana
+jackal
+jacked
+jacker
+jacket
+jading
+jadish
+jaeger
+jagers
+jagged
+jagger
+jagras
+jaguar
+jailed
+jailer
+jailor
+jalaps
+jalops
+jalopy
+jambed
+jambes
+jammed
+jammer
+jangle
+jangly
+japans
+japers
+japery
+japing
+jarful
+jargon
+jarina
+jarrah
+jarred
+jarvey
+jasmin
+jasper
+jassid
+jauked
+jaunce
+jaunts
+jaunty
+jauped
+jawans
+jawing
+jaygee
+jayvee
+jazzbo
+jazzed
+jazzer
+jazzes
+jeaned
+jebels
+jeeing
+jeeped
+jeered
+jeerer
+jehads
+jejuna
+jejune
+jelled
+jellos
+jennet
+jerboa
+jereed
+jerids
+jerked
+jerker
+jerkin
+jerrid
+jersey
+jessed
+jesses
+jested
+jester
+jesuit
+jetlag
+jetons
+jetsam
+jetsom
+jetted
+jetton
+jetway
+jewels
+jewing
+jezail
+jibbed
+jibber
+jibers
+jibing
+jicama
+jigged
+jigger
+jiggle
+jiggly
+jigsaw
+jihads
+jilted
+jilter
+jiminy
+jimmie
+jimper
+jimply
+jingal
+jingko
+jingle
+jingly
+jinked
+jinker
+jinnee
+jinnis
+jinxed
+jinxes
+jitney
+jitter
+jivers
+jivier
+jiving
+jnanas
+jobbed
+jobber
+jockey
+jockos
+jocose
+jocund
+jogged
+jogger
+joggle
+johnny
+joined
+joiner
+joints
+joists
+jojoba
+jokers
+jokier
+jokily
+joking
+jolted
+jolter
+jorams
+jordan
+jorums
+joseph
+joshed
+josher
+joshes
+josses
+jostle
+jotted
+jotter
+jouals
+jouked
+joules
+jounce
+jouncy
+journo
+jousts
+jovial
+jowars
+jowing
+jowled
+joyful
+joying
+joyous
+joypop
+jubbah
+jubhah
+jubile
+judder
+judged
+judger
+judges
+judoka
+jugate
+jugful
+jugged
+juggle
+jugula
+jugums
+juiced
+juicer
+juices
+jujube
+juking
+juleps
+jumbal
+jumble
+jumbos
+jumped
+jumper
+juncos
+jungle
+jungly
+junior
+junked
+junker
+junket
+junkie
+juntas
+juntos
+jupons
+jurant
+jurats
+jurels
+juried
+juries
+jurist
+jurors
+justed
+juster
+justle
+justly
+jutted
+kababs
+kabaka
+kabala
+kabars
+kabaya
+kabiki
+kabobs
+kabuki
+kaffir
+kafirs
+kaftan
+kahuna
+kaiaks
+kainit
+kaiser
+kakapo
+kalams
+kalian
+kalifs
+kaliph
+kalium
+kalmia
+kalong
+kalpac
+kalpak
+kalpas
+kamala
+kamiks
+kamsin
+kanaka
+kanban
+kanjis
+kantar
+kanzus
+kaolin
+kaonic
+kapoks
+kappas
+kaputt
+karate
+karats
+karmas
+karmic
+karoos
+kaross
+karroo
+karsts
+kasbah
+kashas
+kasher
+kation
+kauris
+kavass
+kayaks
+kayles
+kayoed
+kayoes
+kazoos
+kebabs
+kebars
+kebbie
+keblah
+kebobs
+kecked
+keckle
+keddah
+kedged
+kedges
+keeked
+keeled
+keened
+keener
+keenly
+keeper
+keeves
+kefirs
+kegged
+kegger
+kegler
+keleps
+kelims
+keloid
+kelped
+kelpie
+kelson
+kelter
+kelvin
+kenafs
+kendos
+kenned
+kennel
+kentes
+kepped
+keppen
+kerbed
+kerfed
+kermes
+kermis
+kerned
+kernel
+kernes
+kerria
+kersey
+ketene
+ketols
+ketone
+ketose
+kettle
+kevels
+kevils
+kewpie
+keying
+keypad
+keypal
+keyset
+keyway
+khadis
+khakis
+khalif
+khaphs
+khazen
+khedah
+khedas
+kheths
+khoums
+kiangs
+kiaugh
+kibbeh
+kibbes
+kibbis
+kibble
+kibeis
+kibitz
+kiblah
+kiblas
+kibosh
+kicked
+kicker
+kickup
+kidded
+kidder
+kiddie
+kiddos
+kidnap
+kidney
+kidvid
+kilims
+killed
+killer
+killie
+kilned
+kilted
+kilter
+kiltie
+kimchi
+kimono
+kinara
+kinase
+kinder
+kindle
+kindly
+kinema
+kinged
+kingly
+kinins
+kinked
+kiosks
+kipped
+kippen
+kipper
+kirned
+kirsch
+kirtle
+kishka
+kishke
+kismat
+kismet
+kissed
+kisser
+kisses
+kitbag
+kiters
+kithed
+kithes
+kiting
+kitsch
+kitted
+kittel
+kitten
+kittle
+klatch
+klaxon
+klepht
+klepto
+klicks
+klongs
+kloofs
+kludge
+kludgy
+kluged
+kluges
+klutzy
+knacks
+knarry
+knaurs
+knaves
+knawel
+knawes
+kneads
+kneels
+knells
+knifed
+knifer
+knifes
+knight
+knives
+knobby
+knocks
+knolls
+knolly
+knosps
+knotty
+knouts
+knower
+knowns
+knubby
+knurls
+knurly
+koalas
+kobold
+koines
+kolhoz
+kolkoz
+kombus
+konked
+koodoo
+kookie
+kopeck
+kopeks
+kopjes
+koppas
+koppie
+korats
+kormas
+koruna
+koruny
+kosher
+kotows
+koumis
+koumys
+kouroi
+kouros
+kousso
+kowtow
+kraals
+krafts
+kraits
+kraken
+krater
+krauts
+kreeps
+krewes
+krills
+krises
+kronen
+kroner
+kronor
+kronur
+krooni
+kroons
+krubis
+krubut
+kuchen
+kudzus
+kugels
+kukris
+kulaki
+kulaks
+kultur
+kumiss
+kummel
+kurgan
+kurtas
+kussos
+kuvasz
+kvases
+kvells
+kvetch
+kwacha
+kwanza
+kyacks
+kybosh
+kyries
+kythed
+kythes
+laager
+labara
+labels
+labial
+labile
+labium
+labors
+labour
+labret
+labrum
+lacers
+laches
+lacier
+lacily
+lacing
+lacked
+lacker
+lackey
+lactam
+lactic
+lacuna
+lacune
+ladder
+laddie
+ladens
+laders
+ladies
+lading
+ladino
+ladled
+ladler
+ladles
+ladron
+lagans
+lagend
+lagers
+lagged
+lagger
+lagoon
+laguna
+lagune
+lahars
+laical
+laichs
+laighs
+lairds
+laired
+lakers
+lakier
+laking
+lallan
+lalled
+lambda
+lambed
+lamber
+lambie
+lamedh
+lameds
+lamely
+lament
+lamest
+lamiae
+lamias
+lamina
+laming
+lammed
+lampad
+lampas
+lamped
+lanais
+lanate
+lanced
+lancer
+lances
+lancet
+landau
+landed
+lander
+lanely
+langue
+langur
+lanker
+lankly
+lanner
+lanose
+lanugo
+laogai
+lapdog
+lapels
+lapful
+lapins
+lapped
+lapper
+lappet
+lapsed
+lapser
+lapses
+lapsus
+laptop
+larded
+larder
+lardon
+larees
+larger
+larges
+largos
+lariat
+larine
+larked
+larker
+larrup
+larums
+larvae
+larval
+larvas
+larynx
+lascar
+lasers
+lashed
+lasher
+lashes
+lasing
+lasses
+lassie
+lassis
+lassos
+lasted
+laster
+lastly
+lateen
+lately
+latens
+latent
+latest
+lathed
+lather
+lathes
+lathis
+latigo
+latina
+latino
+latish
+latkes
+latria
+latten
+latter
+lattes
+lattin
+lauans
+lauded
+lauder
+laughs
+launce
+launch
+laurae
+lauras
+laurel
+lavabo
+lavage
+lavash
+laveer
+lavers
+laving
+lavish
+lawful
+lawine
+lawing
+lawman
+lawmen
+lawyer
+laxest
+laxity
+layers
+laying
+layins
+layman
+laymen
+layoff
+layout
+layups
+lazars
+lazied
+lazier
+lazies
+lazily
+lazing
+lazuli
+leachy
+leaded
+leaden
+leader
+leafed
+league
+leaked
+leaker
+leally
+lealty
+leaned
+leaner
+leanly
+leaped
+leaper
+learns
+learnt
+leased
+leaser
+leases
+leasts
+leaved
+leaven
+leaver
+leaves
+lebens
+leched
+lecher
+leches
+lechwe
+lectin
+lector
+ledger
+ledges
+leered
+leeway
+lefter
+legacy
+legals
+legate
+legato
+legend
+legers
+legged
+leggin
+legion
+legist
+legits
+legman
+legmen
+legong
+legume
+lehuas
+lekked
+lekvar
+lemans
+lemmas
+lemons
+lemony
+lemurs
+lender
+length
+lenite
+lenity
+lensed
+lenses
+lenten
+lentic
+lentil
+lentos
+leones
+lepers
+leptin
+lepton
+lesbos
+lesion
+lessee
+lessen
+lesser
+lesson
+lessor
+lethal
+lethes
+letted
+letter
+letups
+leucin
+leudes
+leukon
+levant
+leveed
+levees
+levels
+levers
+levied
+levier
+levies
+levins
+levity
+lewder
+lewdly
+lexeme
+lexica
+lezzes
+lezzie
+liable
+liaise
+lianas
+lianes
+liangs
+liards
+libber
+libels
+libers
+libido
+liblab
+librae
+libras
+lichee
+lichen
+liches
+lichis
+lichts
+licked
+licker
+lictor
+lidars
+lidded
+lieder
+liefer
+liefly
+lieges
+lienal
+lierne
+liever
+lifers
+lifted
+lifter
+ligand
+ligans
+ligase
+ligate
+ligers
+lights
+lignan
+lignin
+ligula
+ligule
+ligure
+likely
+likens
+likers
+likest
+liking
+likuta
+lilacs
+lilied
+lilies
+lilted
+limans
+limbas
+limbed
+limber
+limbic
+limbos
+limbus
+limens
+limeys
+limier
+limina
+liming
+limits
+limmer
+limned
+limner
+limnic
+limpas
+limped
+limper
+limpet
+limpid
+limply
+limpsy
+limuli
+linacs
+linage
+linden
+lineal
+linear
+linens
+lineny
+liners
+lineup
+lingam
+lingas
+linger
+lingua
+linier
+lining
+linins
+linked
+linker
+linkup
+linnet
+linsey
+linted
+lintel
+linter
+lintol
+linums
+lipase
+lipide
+lipids
+lipins
+lipoid
+lipoma
+lipped
+lippen
+lipper
+liquid
+liquor
+liroth
+lisles
+lisped
+lisper
+lissom
+listed
+listee
+listel
+listen
+lister
+litany
+litchi
+liters
+lither
+lithia
+lithic
+lithos
+litmus
+litres
+litten
+litter
+little
+lively
+livens
+livers
+livery
+livest
+livier
+living
+livres
+livyer
+lizard
+llamas
+llanos
+loaded
+loader
+loafed
+loafer
+loamed
+loaned
+loaner
+loathe
+loaves
+lobate
+lobbed
+lobber
+lobule
+locale
+locals
+locate
+lochan
+lochia
+locked
+locker
+locket
+lockup
+locoed
+locoes
+locule
+loculi
+locums
+locust
+lodens
+lodged
+lodger
+lodges
+lofted
+lofter
+logans
+logged
+logger
+loggia
+loggie
+logics
+logier
+logily
+logins
+logion
+logjam
+logons
+logway
+loided
+loiter
+lolled
+loller
+lollop
+lomein
+loment
+lonely
+loners
+longan
+longed
+longer
+longes
+longly
+looeys
+loofah
+loofas
+looies
+looing
+looked
+looker
+lookup
+loomed
+looney
+loonie
+looped
+looper
+loosed
+loosen
+looser
+looses
+looted
+looter
+lopers
+loping
+lopped
+lopper
+loquat
+lorans
+lorded
+lordly
+loreal
+lorica
+lories
+losels
+losers
+losing
+losses
+lotahs
+lotion
+lotted
+lotter
+lottes
+lottos
+louche
+louden
+louder
+loudly
+loughs
+louies
+loumas
+lounge
+loungy
+louped
+loupen
+loupes
+loured
+loused
+louses
+louted
+louver
+louvre
+lovage
+lovats
+lovely
+lovers
+loving
+lowboy
+lowers
+lowery
+lowest
+lowing
+lowish
+loxing
+lubber
+lubing
+lubric
+lucent
+lucern
+lucite
+lucked
+luckie
+lucres
+luetic
+luffas
+luffed
+lugers
+lugged
+lugger
+luggie
+luging
+lulled
+luller
+lumbar
+lumber
+lumens
+lumina
+lummox
+lumped
+lumpen
+lumper
+lunacy
+lunars
+lunate
+lunets
+lungan
+lunged
+lungee
+lunger
+lunges
+lungis
+lungyi
+lunier
+lunies
+lunker
+lunted
+lunula
+lunule
+lupine
+lupins
+lupous
+lurdan
+lurers
+luring
+lurked
+lurker
+lushed
+lusher
+lushes
+lushly
+lusted
+luster
+lustra
+lustre
+luteal
+lutein
+luteum
+luting
+lutist
+lutzes
+luxate
+luxury
+lyases
+lycees
+lyceum
+lychee
+lyches
+lycras
+lyings
+lymphs
+lynxes
+lyrate
+lyrics
+lyrism
+lyrist
+lysate
+lysine
+lysing
+lysins
+lyssas
+lyttae
+lyttas
+macaco
+macaws
+macers
+maches
+machos
+macing
+mackle
+macled
+macles
+macons
+macron
+macros
+macula
+macule
+madame
+madams
+madcap
+madded
+madden
+madder
+madman
+madmen
+madras
+madres
+madtom
+maduro
+maenad
+maffia
+mafias
+maftir
+maggot
+magian
+magics
+magilp
+maglev
+magmas
+magnet
+magnum
+magots
+magpie
+maguey
+mahoes
+mahout
+mahzor
+maiden
+maigre
+maihem
+mailed
+mailer
+mailes
+maills
+maimed
+maimer
+mainly
+maists
+maizes
+majors
+makars
+makers
+makeup
+making
+makuta
+malady
+malars
+malate
+malfed
+malgre
+malice
+malign
+maline
+malkin
+malled
+mallee
+mallei
+mallet
+mallow
+maloti
+malted
+maltha
+maltol
+mambas
+mambos
+mameys
+mamies
+mamluk
+mammae
+mammal
+mammas
+mammee
+mammer
+mammet
+mammey
+mammie
+mammon
+mamzer
+manage
+manana
+manats
+manche
+manege
+manful
+mangas
+mangel
+manger
+manges
+mangey
+mangle
+mangos
+maniac
+manias
+manics
+manila
+manioc
+manito
+manitu
+mannan
+mannas
+manned
+manner
+manors
+manque
+manses
+mantas
+mantel
+mantes
+mantic
+mantid
+mantis
+mantle
+mantra
+mantua
+manual
+manure
+maples
+mapped
+mapper
+maquis
+maraca
+maraud
+marble
+marbly
+marcel
+margay
+marges
+margin
+marina
+marine
+marish
+markas
+marked
+marker
+market
+markka
+markup
+marled
+marlin
+marmot
+maroon
+marque
+marram
+marred
+marrer
+marron
+marrow
+marses
+marshy
+marted
+marten
+martin
+martyr
+marvel
+masala
+mascon
+mascot
+masers
+mashed
+masher
+mashes
+mashie
+masjid
+masked
+maskeg
+masker
+masons
+masque
+massif
+masted
+master
+mastic
+mastix
+maters
+mateys
+matier
+mating
+matins
+matres
+matrix
+matron
+matsah
+matted
+matter
+mattes
+mattin
+mature
+matzah
+matzas
+matzoh
+matzos
+matzot
+mauger
+maugre
+mauled
+mauler
+maumet
+maunds
+maundy
+mauves
+mavens
+mavies
+mavins
+mawing
+maxima
+maxims
+maxing
+maxixe
+maybes
+mayday
+mayest
+mayfly
+mayhap
+mayhem
+maying
+mayors
+maypop
+mayvin
+mazard
+mazers
+mazier
+mazily
+mazing
+mazuma
+mbiras
+meadow
+meager
+meagre
+mealie
+meaner
+meanie
+meanly
+measle
+measly
+meatal
+meated
+meatus
+meccas
+medaka
+medals
+meddle
+medfly
+mediad
+mediae
+medial
+median
+medias
+medick
+medico
+medics
+medina
+medium
+medius
+medlar
+medley
+medusa
+meeker
+meekly
+meeter
+meetly
+megara
+megilp
+megohm
+megrim
+mehndi
+meikle
+meinie
+melded
+melder
+melees
+melena
+melled
+mellow
+melody
+meloid
+melons
+melted
+melter
+melton
+member
+memoir
+memory
+menace
+menads
+menage
+mended
+mender
+menhir
+menial
+meninx
+mensae
+mensal
+mensas
+mensch
+mensed
+menses
+mental
+mentee
+mentor
+mentum
+menudo
+meoued
+meowed
+mercer
+merces
+merdes
+merely
+merest
+merged
+mergee
+merger
+merges
+merino
+merits
+merles
+merlin
+merlon
+merlot
+merman
+mermen
+mescal
+meshed
+meshes
+mesial
+mesian
+mesnes
+mesons
+messan
+messed
+messes
+mestee
+metage
+metals
+metate
+meteor
+metepa
+meters
+method
+methyl
+metier
+meting
+metols
+metope
+metred
+metres
+metric
+metros
+mettle
+metump
+mewing
+mewled
+mewler
+mezcal
+mezuza
+mezzos
+miaous
+miaows
+miasma
+miasms
+miauls
+micell
+miched
+miches
+mickey
+mickle
+micron
+micros
+midair
+midcap
+midday
+midden
+middle
+midges
+midget
+midgut
+midleg
+midrib
+midsts
+midway
+miffed
+miggle
+mights
+mighty
+mignon
+mihrab
+mikado
+miking
+mikron
+mikvah
+mikveh
+mikvos
+mikvot
+miladi
+milady
+milage
+milded
+milden
+milder
+mildew
+mildly
+milers
+milieu
+milium
+milked
+milker
+milled
+miller
+milles
+millet
+milneb
+milord
+milpas
+milted
+milter
+mimbar
+mimeos
+mimers
+mimics
+miming
+mimosa
+minced
+mincer
+minces
+minded
+minder
+miners
+mingle
+minify
+minima
+minims
+mining
+minion
+minish
+minium
+minkes
+minnow
+minors
+minted
+minter
+minuet
+minute
+minxes
+minyan
+mioses
+miosis
+miotic
+mirage
+mirier
+miring
+mirins
+mirker
+mirror
+mirths
+mirzas
+misact
+misadd
+misaim
+misate
+miscue
+miscut
+misdid
+miseat
+misers
+misery
+misfed
+misfit
+mishap
+miskal
+mislay
+misled
+mislie
+mislit
+mismet
+mispen
+missal
+missay
+missed
+missel
+misses
+misset
+missis
+missus
+misted
+mister
+misuse
+miters
+mither
+mitier
+mitral
+mitred
+mitres
+mitten
+mixers
+mixing
+mixups
+mizens
+mizuna
+mizzen
+mizzle
+mizzly
+moaned
+moaner
+moated
+mobbed
+mobber
+mobcap
+mobile
+mobled
+mochas
+mocked
+mocker
+mockup
+modals
+models
+modems
+modern
+modest
+modica
+modify
+modish
+module
+moduli
+modulo
+mogged
+moggie
+moghul
+moguls
+mohair
+mohawk
+mohels
+mohurs
+moiety
+moiled
+moiler
+moirai
+moires
+mojoes
+molars
+molded
+molder
+molies
+moline
+mollah
+mollie
+moloch
+molted
+molten
+molter
+moment
+mommas
+momser
+momzer
+monads
+mondes
+mondos
+moneys
+monger
+mongoe
+mongol
+mongos
+mongst
+monied
+monies
+monish
+monism
+monist
+monkey
+monody
+montes
+months
+mooing
+moolah
+moolas
+mooley
+mooned
+mooner
+moored
+mooted
+mooter
+mopeds
+mopers
+mopery
+mopier
+moping
+mopish
+mopoke
+mopped
+mopper
+moppet
+morale
+morals
+morays
+morbid
+moreen
+morels
+morgan
+morgen
+morgue
+morion
+morons
+morose
+morpho
+morphs
+morris
+morros
+morrow
+morsel
+mortal
+mortar
+morula
+mosaic
+moseys
+moshav
+moshed
+mosher
+moshes
+mosque
+mossed
+mosser
+mosses
+mostly
+motels
+motets
+mother
+motifs
+motile
+motion
+motive
+motley
+motmot
+motors
+mottes
+mottle
+mottos
+moujik
+moulds
+mouldy
+moulin
+moults
+mounds
+mounts
+mourns
+moused
+mouser
+mouses
+mousey
+mousse
+mouths
+mouthy
+mouton
+movers
+movies
+moving
+mowers
+mowing
+moxies
+muches
+muchly
+mucins
+mucked
+mucker
+muckle
+mucluc
+mucoid
+mucors
+mucosa
+mucose
+mucous
+mudbug
+mudcap
+mudcat
+mudded
+mudder
+muddle
+muddly
+mudhen
+mudras
+muesli
+muffed
+muffin
+muffle
+muftis
+mugful
+muggar
+mugged
+muggee
+mugger
+muggur
+mughal
+mujiks
+mukluk
+muktuk
+mulcts
+muleta
+muleys
+muling
+mulish
+mullah
+mullas
+mulled
+mullen
+muller
+mullet
+mulley
+mumble
+mumbly
+mummed
+mummer
+mumped
+mumper
+mungos
+muntin
+muonic
+murals
+murder
+murein
+murids
+murine
+muring
+murker
+murkly
+murmur
+murphy
+murras
+murres
+murrey
+murrha
+muscae
+muscat
+muscid
+muscle
+muscly
+musers
+museum
+mushed
+musher
+mushes
+musick
+musics
+musing
+musjid
+muskeg
+musket
+muskie
+muskit
+muskox
+muslin
+mussed
+mussel
+musses
+musted
+mustee
+muster
+musths
+mutant
+mutase
+mutate
+mutely
+mutest
+mutine
+muting
+mutiny
+mutism
+mutons
+mutter
+mutton
+mutual
+mutuel
+mutule
+muumuu
+muzhik
+muzjik
+muzzle
+myases
+myasis
+mycele
+myelin
+mylars
+mynahs
+myomas
+myopes
+myopia
+myopic
+myoses
+myosin
+myosis
+myotic
+myriad
+myrica
+myrrhs
+myrtle
+myself
+mysids
+mysost
+mystic
+mythic
+mythoi
+mythos
+myxoid
+myxoma
+nabbed
+nabber
+nabobs
+nachas
+naches
+nachos
+nacred
+nacres
+nadirs
+naevus
+naffed
+nagana
+nagged
+nagger
+naiads
+nailed
+nailer
+nairas
+nairus
+naiver
+naives
+nakfas
+naleds
+namely
+namers
+naming
+nances
+nandin
+nanism
+nankin
+nannie
+napalm
+napery
+napkin
+nappas
+napped
+napper
+nappes
+nappie
+narcos
+narial
+narine
+narked
+narrow
+narwal
+nasals
+nasial
+nasion
+nastic
+natant
+nation
+native
+natron
+natter
+nature
+naught
+nausea
+nautch
+navaid
+navars
+navels
+navies
+nawabs
+naysay
+nazify
+nearby
+neared
+nearer
+nearly
+neaten
+neater
+neatly
+nebula
+nebule
+nebuly
+necked
+necker
+nectar
+needed
+needer
+needle
+negate
+neighs
+nekton
+nellie
+nelson
+neocon
+neoned
+nepeta
+nephew
+nereid
+nereis
+neroli
+nerols
+nerved
+nerves
+nesses
+nested
+nester
+nestle
+nestor
+nether
+netops
+netted
+netter
+nettle
+nettly
+neumes
+neumic
+neural
+neuron
+neuter
+nevoid
+newbie
+newels
+newest
+newies
+newish
+newsie
+newton
+niacin
+nibbed
+nibble
+nicads
+nicely
+nicest
+nicety
+niched
+niches
+nicked
+nickel
+nicker
+nickle
+nicols
+nidate
+nidget
+nidify
+niding
+nieces
+nielli
+niello
+nieves
+niffer
+nigger
+niggle
+niggly
+nighed
+nigher
+nights
+nighty
+nihils
+nilgai
+nilgau
+nilled
+nimble
+nimbly
+nimbus
+nimmed
+nimrod
+ninety
+ninjas
+ninons
+ninths
+niobic
+nipped
+nipper
+nipple
+niseis
+niters
+nitery
+nitons
+nitres
+nitric
+nitrid
+nitril
+nitros
+nitwit
+nixies
+nixing
+nizams
+nobble
+nobler
+nobles
+nobody
+nocent
+nocked
+nodded
+nodder
+noddle
+nodose
+nodous
+nodule
+noesis
+noetic
+nogged
+noggin
+noised
+noises
+nomads
+nomina
+nomism
+nonage
+nonart
+nonces
+noncom
+nonego
+nonets
+nonfan
+nonfat
+nongay
+nonman
+nonmen
+nonpar
+nontax
+nonuse
+nonwar
+nonyls
+noodge
+noodle
+noogie
+nookie
+noosed
+nooser
+nooses
+nopals
+nordic
+norias
+norite
+normal
+normed
+norths
+noshed
+nosher
+noshes
+nosier
+nosily
+nosing
+nostoc
+notary
+notate
+noters
+nother
+notice
+notify
+noting
+notion
+nougat
+nought
+nounal
+nouses
+novels
+novena
+novice
+noways
+nowise
+noyade
+nozzle
+nuance
+nubbin
+nubble
+nubbly
+nubias
+nubile
+nubuck
+nuchae
+nuchal
+nuclei
+nudely
+nudest
+nudged
+nudger
+nudges
+nudies
+nudism
+nudist
+nudity
+nudnik
+nugget
+nuking
+nullah
+nulled
+numbat
+numbed
+number
+numbly
+numina
+nuncio
+nuncle
+nurled
+nursed
+nurser
+nurses
+nutant
+nutate
+nutlet
+nutmeg
+nutria
+nuzzle
+nyalas
+oafish
+oakier
+oakums
+oaring
+oaters
+obeahs
+obelia
+obelus
+obento
+obeyed
+obeyer
+obiism
+object
+objets
+oblast
+oblate
+oblige
+oblong
+oboist
+oboles
+obolus
+obsess
+obtain
+obtect
+obtest
+obtund
+obtuse
+obvert
+occult
+occupy
+occurs
+oceans
+ocelli
+ocelot
+ochers
+ochery
+ochone
+ochrea
+ochred
+ochres
+ocicat
+ockers
+ocreae
+octads
+octane
+octans
+octant
+octave
+octavo
+octets
+octopi
+octroi
+octyls
+ocular
+oculus
+oddest
+oddish
+oddity
+odeons
+odeums
+odious
+odists
+odiums
+odored
+odours
+odyles
+oedema
+oeuvre
+offals
+offcut
+offend
+offers
+office
+offing
+offish
+offkey
+offset
+oftest
+ogdoad
+oghams
+ogival
+ogives
+oglers
+ogling
+ogress
+ogrish
+ogrism
+ohmage
+oidium
+oilcan
+oilcup
+oilers
+oilier
+oilily
+oiling
+oilman
+oilmen
+oilway
+oinked
+okapis
+okayed
+oldest
+oldies
+oldish
+oleate
+olefin
+oleine
+oleins
+oleums
+olingo
+olives
+omasum
+ombers
+ombres
+omegas
+omelet
+omened
+omenta
+onager
+onagri
+onions
+oniony
+onlays
+online
+onload
+onrush
+onsets
+onside
+onuses
+onward
+onyxes
+oocyst
+oocyte
+oodles
+oogamy
+oogeny
+oohing
+oolite
+oolith
+oology
+oolong
+oomiac
+oomiak
+oompah
+oomphs
+oorali
+ootids
+oozier
+oozily
+oozing
+opaque
+opened
+opener
+openly
+operas
+operon
+ophite
+opiate
+opined
+opines
+opioid
+opiums
+oppose
+oppugn
+opsins
+optics
+optima
+optime
+opting
+option
+opuses
+orache
+oracle
+orally
+orange
+orangs
+orangy
+orated
+orates
+orator
+orbier
+orbing
+orbits
+orcein
+orchid
+orchil
+orchis
+orcins
+ordain
+ordeal
+orders
+ordure
+oreads
+oreide
+orfray
+organs
+orgone
+oribis
+oriels
+orient
+origan
+origin
+oriole
+orisha
+orison
+orlons
+orlops
+ormers
+ormolu
+ornate
+ornery
+oroide
+orphan
+orphic
+orpine
+orpins
+orrery
+orrice
+oryxes
+oscine
+oscula
+oscule
+osetra
+osiers
+osmics
+osmium
+osmole
+osmols
+osmose
+osmous
+osmund
+osprey
+ossein
+ossify
+osteal
+ostium
+ostler
+ostomy
+otalgy
+others
+otiose
+otitic
+otitis
+ottars
+ottava
+otters
+ouched
+ouches
+oughts
+ounces
+ouphes
+ourang
+ourari
+ourebi
+ousels
+ousted
+ouster
+outact
+outadd
+outage
+outask
+outate
+outbeg
+outbid
+outbox
+outbuy
+outbye
+outcry
+outdid
+outeat
+outers
+outfit
+outfly
+outfox
+outgas
+outgun
+outhit
+outing
+outjut
+outlaw
+outlay
+outled
+outlet
+outlie
+outman
+output
+outran
+outrig
+outrow
+outrun
+outsat
+outsaw
+outsay
+outsee
+outset
+outsin
+outsit
+outvie
+outwar
+outwit
+ouzels
+ovally
+overdo
+overed
+overly
+ovibos
+ovines
+ovisac
+ovoids
+ovolos
+ovonic
+ovular
+ovules
+owlets
+owlish
+owners
+owning
+oxalic
+oxalis
+oxbows
+oxcart
+oxeyes
+oxford
+oxides
+oxidic
+oximes
+oxlike
+oxlips
+oxtail
+oxters
+oxygen
+oyezes
+oyster
+ozalid
+ozones
+ozonic
+pablum
+pacers
+pachas
+pacier
+pacify
+pacing
+packed
+packer
+packet
+packly
+padauk
+padded
+padder
+paddle
+padles
+padnag
+padouk
+padres
+paeans
+paella
+paeons
+paesan
+pagans
+pagers
+paging
+pagoda
+pagods
+paiked
+painch
+pained
+paints
+painty
+paired
+paisan
+paisas
+pajama
+pakeha
+pakora
+palace
+palais
+palapa
+palate
+paleae
+paleal
+palely
+palest
+palets
+palier
+paling
+palish
+palled
+pallet
+pallia
+pallid
+pallor
+palmar
+palmed
+palmer
+palpal
+palped
+palpus
+palter
+paltry
+pampas
+pamper
+panada
+panama
+pandas
+pander
+pandit
+panels
+panfry
+panful
+pangas
+panged
+pangen
+panics
+panier
+panini
+panino
+panned
+panner
+pannes
+panted
+pantie
+pantos
+pantry
+panzer
+papacy
+papain
+papaws
+papaya
+papers
+papery
+papism
+papist
+pappus
+papula
+papule
+papyri
+parade
+paramo
+parang
+paraph
+parcel
+pardah
+pardee
+pardie
+pardon
+parent
+pareos
+parers
+pareus
+pareve
+parged
+parges
+parget
+pargos
+pariah
+parian
+paries
+paring
+parish
+parity
+parkas
+parked
+parker
+parlay
+parled
+parles
+parley
+parlor
+parody
+parole
+parols
+parous
+parral
+parred
+parrel
+parrot
+parsec
+parsed
+parser
+parses
+parson
+partan
+parted
+partly
+parton
+parura
+parure
+parvis
+parvos
+pascal
+paseos
+pashas
+pashed
+pashes
+pastas
+pasted
+pastel
+paster
+pastes
+pastie
+pastil
+pastis
+pastor
+pastry
+pataca
+patchy
+patens
+patent
+paters
+pathos
+patina
+patine
+patins
+patios
+patois
+patrol
+patron
+patted
+pattee
+patten
+patter
+pattie
+patzer
+paulin
+paunch
+pauper
+pausal
+paused
+pauser
+pauses
+pavane
+pavans
+paveed
+pavers
+paving
+pavins
+pavior
+pavise
+pawers
+pawing
+pawned
+pawnee
+pawner
+pawnor
+pawpaw
+paxwax
+payday
+payees
+payers
+paying
+paynim
+payoff
+payola
+payors
+payout
+pazazz
+peaced
+peaces
+peachy
+peages
+peahen
+peaked
+pealed
+peanut
+pearls
+pearly
+peasen
+peases
+peavey
+pebble
+pebbly
+pecans
+pechan
+peched
+pecked
+pecker
+pecten
+pectic
+pectin
+pedalo
+pedals
+pedant
+pedate
+peddle
+pedlar
+pedler
+pedros
+peeing
+peeked
+peeled
+peeler
+peened
+peered
+peerie
+pegged
+peined
+peised
+peises
+pekans
+pekins
+pekoes
+pelage
+pelite
+pellet
+pelmet
+pelota
+pelted
+pelter
+peltry
+pelves
+pelvic
+pelvis
+penang
+pencel
+pencil
+pended
+pengos
+penial
+penile
+penman
+penmen
+pennae
+penned
+penner
+pennia
+pennis
+pennon
+pensee
+pensil
+pentad
+pentyl
+penult
+penury
+peones
+people
+pepino
+peplos
+peplum
+peplus
+pepped
+pepper
+pepsin
+peptic
+peptid
+perdie
+perdue
+perdus
+pereia
+pereon
+perils
+period
+perish
+periti
+perked
+permed
+permit
+pernio
+pernod
+peroxy
+perron
+perses
+person
+perter
+pertly
+peruke
+peruse
+pesade
+peseta
+pesewa
+pester
+pestle
+pestos
+petals
+petard
+peters
+petite
+petnap
+petrel
+petrol
+petsai
+petted
+petter
+pettle
+pewees
+pewits
+pewter
+peyote
+peyotl
+phages
+pharos
+phased
+phases
+phasic
+phasis
+phatic
+phenix
+phenol
+phenom
+phenyl
+phials
+phizes
+phlegm
+phloem
+phobia
+phobic
+phoebe
+phonal
+phoned
+phones
+phoney
+phonic
+phonon
+phonos
+phooey
+photic
+photog
+photon
+photos
+phrase
+phreak
+phylae
+phylar
+phylic
+phyllo
+phylon
+phylum
+physed
+physes
+physic
+physis
+phytin
+phytol
+phyton
+piaffe
+pianic
+pianos
+piazza
+piazze
+pibals
+picara
+picaro
+pickax
+picked
+picker
+picket
+pickle
+pickup
+picnic
+picots
+picric
+piculs
+piddle
+piddly
+pidgin
+pieced
+piecer
+pieces
+pieing
+pierce
+pietas
+piffle
+pigeon
+pigged
+piggie
+piggin
+piglet
+pignus
+pignut
+pigout
+pigpen
+pigsty
+pikake
+pikers
+piking
+pilaff
+pilafs
+pilaus
+pilaws
+pileum
+pileup
+pileus
+pilfer
+piling
+pillar
+pilled
+pillow
+pilose
+pilots
+pilous
+pilule
+pimped
+pimple
+pimply
+pinang
+pinata
+pincer
+pinder
+pineal
+pinene
+pinery
+pineta
+pinged
+pinger
+pingos
+pinier
+pining
+pinion
+pinite
+pinked
+pinken
+pinker
+pinkey
+pinkie
+pinkly
+pinkos
+pinnae
+pinnal
+pinnas
+pinned
+pinner
+pinole
+pinons
+pinots
+pintas
+pintle
+pintos
+pinups
+pinyin
+pinyon
+piolet
+pionic
+pipage
+pipals
+pipers
+pipets
+pipier
+piping
+pipits
+pipkin
+pipped
+pippin
+piqued
+piques
+piquet
+piracy
+pirana
+pirate
+piraya
+pirogi
+piscos
+pistil
+pistol
+piston
+pistou
+pitaya
+pitchy
+pithed
+pitied
+pitier
+pities
+pitman
+pitmen
+pitons
+pitsaw
+pittas
+pitted
+pivots
+pixels
+pixies
+pizazz
+pizzas
+pizzaz
+pizzle
+placed
+placer
+places
+placet
+placid
+placks
+plagal
+plages
+plague
+plaguy
+plaice
+plaids
+plains
+plaint
+plaits
+planar
+planch
+planed
+planer
+planes
+planet
+planks
+plants
+plaque
+plashy
+plasma
+plasms
+platan
+plated
+platen
+plater
+plates
+platys
+playas
+played
+player
+plazas
+pleach
+pleads
+please
+pleats
+plebes
+pledge
+pleiad
+plench
+plenty
+plenum
+pleons
+pleura
+plexal
+plexes
+plexor
+plexus
+pliant
+plicae
+plical
+pliers
+plight
+plinks
+plinth
+plisky
+plisse
+ploidy
+plonks
+plotty
+plough
+plover
+plowed
+plower
+ployed
+plucks
+plucky
+plumbs
+plumed
+plumes
+plummy
+plumps
+plunge
+plunks
+plunky
+plural
+pluses
+plushy
+plutei
+pluton
+plyers
+plying
+pneuma
+poachy
+poboys
+pocked
+pocket
+podded
+podite
+podium
+podsol
+podzol
+poetic
+poetry
+pogeys
+pogies
+pogrom
+poilus
+poinds
+pointe
+points
+pointy
+poised
+poiser
+poises
+poisha
+poison
+pokers
+pokeys
+pokier
+pokies
+pokily
+poking
+polars
+polder
+poleax
+poleis
+polers
+poleyn
+police
+policy
+polies
+poling
+polios
+polish
+polite
+polity
+polkas
+polled
+pollee
+pollen
+poller
+pollex
+polyol
+polypi
+polyps
+pomace
+pomade
+pomelo
+pommee
+pommel
+pommie
+pompom
+pompon
+ponced
+ponces
+poncho
+ponded
+ponder
+ponent
+ponged
+pongee
+pongid
+ponied
+ponies
+pontes
+pontil
+ponton
+poodle
+poohed
+pooing
+pooled
+pooler
+pooped
+poorer
+pooris
+poorly
+pooves
+popery
+popgun
+popish
+poplar
+poplin
+poppas
+popped
+popper
+poppet
+popple
+popsie
+poring
+porism
+porked
+porker
+pornos
+porose
+porous
+portal
+ported
+porter
+portly
+posada
+posers
+poseur
+posher
+poshly
+posies
+posing
+posits
+posole
+posses
+posset
+possum
+postal
+posted
+poster
+postie
+postin
+postop
+potage
+potash
+potato
+potboy
+poteen
+potent
+potful
+pother
+pothos
+potion
+potman
+potmen
+potpie
+potsie
+potted
+potter
+pottle
+pottos
+potzer
+pouchy
+poufed
+pouffe
+pouffs
+pouffy
+poults
+pounce
+pounds
+poured
+pourer
+pouted
+pouter
+powder
+powers
+powter
+powwow
+poxier
+poxing
+poyous
+pozole
+praams
+prahus
+praise
+prajna
+prance
+prangs
+pranks
+prases
+prated
+prater
+prates
+prawns
+praxes
+praxis
+prayed
+prayer
+preach
+preact
+preamp
+prearm
+prebid
+prebuy
+precis
+precut
+predry
+preens
+prefab
+prefer
+prefix
+prelaw
+prelim
+preman
+premed
+premen
+premie
+premix
+preops
+prepay
+preppy
+preset
+presto
+prests
+pretax
+pretor
+pretty
+prevue
+prewar
+prexes
+preyed
+preyer
+prezes
+priapi
+priced
+pricer
+prices
+pricey
+prided
+prides
+priers
+priest
+prills
+primal
+primas
+primed
+primer
+primes
+primly
+primos
+primps
+primus
+prince
+prinks
+prints
+prions
+priors
+priory
+prised
+prises
+prisms
+prison
+prissy
+privet
+prized
+prizer
+prizes
+probed
+prober
+probes
+probit
+proems
+profit
+progun
+projet
+prolan
+proleg
+proles
+prolix
+prolog
+promos
+prompt
+prongs
+pronto
+proofs
+propel
+proper
+propyl
+prosed
+proser
+proses
+prosit
+prosos
+protea
+protei
+proton
+protyl
+proved
+proven
+prover
+proves
+prowar
+prower
+prowls
+prudes
+pruned
+pruner
+prunes
+prunus
+prutah
+prutot
+pryers
+prying
+psalms
+pseudo
+pseuds
+pshaws
+psocid
+psyche
+psycho
+psychs
+psylla
+psyops
+psywar
+pterin
+ptisan
+ptooey
+ptoses
+ptosis
+ptotic
+public
+pucker
+puddle
+puddly
+pueblo
+puffed
+puffer
+puffin
+pugged
+puggry
+pugree
+puisne
+pujahs
+puking
+pulers
+puling
+pulled
+puller
+pullet
+pulley
+pullup
+pulpal
+pulped
+pulper
+pulpit
+pulque
+pulsar
+pulsed
+pulser
+pulses
+pumelo
+pumice
+pummel
+pumped
+pumper
+punchy
+pundit
+pungle
+punier
+punily
+punish
+punjis
+punkah
+punkas
+punker
+punkey
+punkie
+punkin
+punned
+punner
+punnet
+punted
+punter
+puntos
+pupate
+pupils
+pupped
+puppet
+purana
+purdah
+purdas
+pureed
+purees
+purely
+purest
+purfle
+purged
+purger
+purges
+purify
+purine
+purins
+purism
+purist
+purity
+purled
+purlin
+purple
+purply
+purred
+pursed
+purser
+purses
+pursue
+purvey
+pushed
+pusher
+pushes
+pushup
+pusley
+pusses
+pussly
+putlog
+putoff
+putons
+putout
+putrid
+putsch
+putted
+puttee
+putter
+puttie
+putzed
+putzes
+puzzle
+pyemia
+pyemic
+pyjama
+pyknic
+pylons
+pylori
+pyoses
+pyosis
+pyrans
+pyrene
+pyrite
+pyrola
+pyrone
+pyrope
+pyrrol
+python
+pyuria
+pyxies
+qabala
+qanats
+qindar
+qintar
+qiviut
+quacks
+quacky
+quaere
+quaffs
+quagga
+quaggy
+quahog
+quaich
+quaigh
+quails
+quaint
+quaked
+quaker
+quakes
+qualia
+qualms
+qualmy
+quango
+quanta
+quants
+quarks
+quarry
+quarte
+quarto
+quarts
+quartz
+quasar
+quatre
+quaver
+qubits
+qubyte
+queans
+queasy
+queazy
+queens
+queers
+quelea
+quells
+quench
+querns
+quests
+queued
+queuer
+queues
+quezal
+quiche
+quicks
+quiets
+quiffs
+quills
+quilts
+quince
+quinic
+quinin
+quinoa
+quinol
+quinsy
+quinta
+quinte
+quints
+quippu
+quippy
+quipus
+quired
+quires
+quirks
+quirky
+quirts
+quitch
+quiver
+quohog
+quoins
+quoits
+quokka
+quolls
+quorum
+quotas
+quoted
+quoter
+quotes
+quotha
+qurush
+qwerty
+rabato
+rabats
+rabbet
+rabbin
+rabbis
+rabbit
+rabble
+rabies
+raceme
+racers
+rachet
+rachis
+racier
+racily
+racing
+racked
+racker
+racket
+rackle
+racons
+racoon
+radars
+radded
+raddle
+radial
+radian
+radios
+radish
+radium
+radius
+radome
+radons
+radula
+raffia
+raffle
+rafted
+rafter
+ragbag
+ragees
+ragged
+raggee
+raggle
+raging
+raglan
+ragman
+ragmen
+ragout
+ragtag
+ragtop
+raided
+raider
+railed
+railer
+rained
+raised
+raiser
+raises
+raisin
+raitas
+rajahs
+rakees
+rakers
+raking
+rakish
+rallye
+ralphs
+ramada
+ramate
+rambla
+ramble
+ramees
+ramets
+ramies
+ramify
+ramjet
+rammed
+rammer
+ramona
+ramose
+ramous
+ramped
+ramrod
+ramson
+ramtil
+rances
+rancho
+rancid
+rancor
+randan
+random
+ranees
+ranged
+ranger
+ranges
+ranids
+ranked
+ranker
+rankle
+rankly
+ransom
+ranted
+ranter
+ranula
+rarefy
+rarely
+rarest
+rarify
+raring
+rarity
+rascal
+rasers
+rasher
+rashes
+rashly
+rasing
+rasped
+rasper
+rassle
+raster
+rasure
+ratals
+ratans
+ratany
+ratbag
+ratels
+raters
+rather
+ratify
+ratine
+rating
+ration
+ratios
+ratite
+ratlin
+ratoon
+rattan
+ratted
+ratten
+ratter
+rattle
+rattly
+ratton
+raunch
+ravage
+ravels
+ravens
+ravers
+ravine
+raving
+ravins
+ravish
+rawest
+rawins
+rawish
+raxing
+rayahs
+raying
+rayons
+razeed
+razees
+razers
+razing
+razors
+razzed
+razzes
+reacts
+readds
+reader
+reagin
+realer
+reales
+realia
+really
+realms
+realty
+reamed
+reamer
+reaped
+reaper
+reared
+rearer
+rearms
+reason
+reatas
+reaved
+reaver
+reaves
+reavow
+rebait
+rebars
+rebate
+rebato
+rebbes
+rebeck
+rebecs
+rebels
+rebids
+rebill
+rebind
+rebody
+reboil
+rebook
+reboot
+rebops
+rebore
+reborn
+rebozo
+rebred
+rebuff
+rebuke
+rebury
+rebuts
+rebuys
+recall
+recane
+recant
+recaps
+recast
+recces
+recede
+recent
+recept
+recess
+rechew
+recipe
+recite
+recits
+recked
+reckon
+reclad
+recoal
+recoat
+recock
+recode
+recoil
+recoin
+recomb
+recons
+recook
+recopy
+record
+recork
+recoup
+rectal
+rector
+rectos
+rectum
+rectus
+recurs
+recuse
+recuts
+redact
+redans
+redate
+redbay
+redbud
+redbug
+redcap
+redded
+redden
+redder
+reddle
+redear
+redeem
+redefy
+redeny
+redeye
+redfin
+rediae
+redial
+redias
+reding
+redips
+redipt
+redleg
+redock
+redoes
+redone
+redons
+redout
+redowa
+redraw
+redrew
+redtop
+redubs
+reduce
+redyed
+redyes
+reearn
+reecho
+reechy
+reeded
+reedit
+reefed
+reefer
+reeked
+reeker
+reeled
+reeler
+reemit
+reests
+reeved
+reeves
+reface
+refall
+refect
+refeed
+refeel
+refell
+refels
+refelt
+refers
+reffed
+refile
+refill
+refilm
+refind
+refine
+refire
+refits
+reflag
+reflet
+reflew
+reflex
+reflow
+reflux
+refold
+reform
+refuel
+refuge
+refund
+refuse
+refute
+regain
+regale
+regard
+regave
+regear
+regent
+reggae
+regild
+regilt
+regime
+regina
+region
+regius
+regive
+reglet
+reglow
+reglue
+regnal
+regnum
+regret
+regrew
+regrow
+reguli
+rehabs
+rehang
+rehash
+rehear
+reheat
+reheel
+rehems
+rehire
+rehung
+reigns
+reined
+reinks
+reived
+reiver
+reives
+reject
+rejigs
+rejoin
+rekeys
+reknit
+reknot
+relace
+relaid
+reland
+relate
+relays
+relend
+relent
+relets
+releve
+relics
+relict
+relied
+relief
+relier
+relies
+reline
+relink
+relish
+relist
+relive
+reload
+reloan
+relock
+relook
+reluct
+relume
+remade
+remail
+remain
+remake
+remand
+remans
+remaps
+remark
+remate
+remedy
+remeet
+remelt
+remend
+remind
+remint
+remise
+remiss
+remits
+remixt
+remold
+remora
+remote
+remove
+remuda
+renail
+rename
+rended
+render
+renege
+renest
+renews
+renigs
+renins
+rennet
+rennin
+renown
+rental
+rented
+renter
+rentes
+renvoi
+reoils
+reopen
+repack
+repaid
+repair
+repand
+repark
+repass
+repast
+repave
+repays
+repeal
+repeat
+repegs
+repels
+repent
+reperk
+repine
+repins
+replan
+replay
+repled
+replot
+replow
+repoll
+report
+repose
+repots
+repour
+repped
+repros
+repugn
+repump
+repute
+requin
+rerack
+reread
+rerent
+rerigs
+rerise
+reroll
+reroof
+rerose
+reruns
+resaid
+resail
+resale
+resawn
+resaws
+resays
+rescue
+reseal
+reseat
+reseau
+resect
+reseda
+reseed
+reseek
+reseen
+resees
+resell
+resend
+resent
+resets
+resewn
+resews
+reshes
+reship
+reshod
+reshoe
+reshot
+reshow
+reside
+resids
+resift
+resign
+resile
+resins
+resiny
+resist
+resite
+resits
+resize
+resoak
+resods
+resold
+resole
+resorb
+resort
+resown
+resows
+respot
+rested
+rester
+result
+resume
+retack
+retags
+retail
+retain
+retake
+retape
+reteam
+retear
+retell
+retems
+retene
+retest
+retial
+retied
+reties
+retile
+retime
+retina
+retine
+retint
+retire
+retold
+retook
+retool
+retore
+retorn
+retort
+retral
+retrim
+retros
+retted
+retune
+return
+retuse
+retype
+reused
+reuses
+revamp
+reveal
+revels
+reverb
+revere
+revers
+revert
+revery
+revest
+revets
+review
+revile
+revise
+revive
+revoke
+revolt
+revote
+revues
+revved
+rewake
+reward
+rewarm
+rewash
+rewear
+reweds
+reweld
+rewets
+rewind
+rewins
+rewire
+rewoke
+reword
+rewore
+rework
+reworn
+rewove
+rewrap
+rexine
+rezero
+rezone
+rhaphe
+rhebok
+rhemes
+rhesus
+rhetor
+rheums
+rheumy
+rhinal
+rhinos
+rhodic
+rhombi
+rhombs
+rhotic
+rhumba
+rhumbs
+rhuses
+rhymed
+rhymer
+rhymes
+rhythm
+rhyton
+rialto
+riatas
+ribald
+riband
+ribbed
+ribber
+ribbon
+ribier
+riblet
+ribose
+ricers
+richen
+richer
+riches
+richly
+ricing
+ricins
+ricked
+rickey
+ricrac
+rictal
+rictus
+ridded
+ridden
+ridder
+riddle
+rident
+riders
+ridged
+ridgel
+ridges
+ridgil
+riding
+ridley
+riever
+rifely
+rifest
+riffed
+riffle
+rifled
+rifler
+rifles
+riflip
+rifted
+rigged
+rigger
+righto
+rights
+righty
+rigors
+rigour
+riling
+rilled
+rilles
+rillet
+rimers
+rimier
+riming
+rimmed
+rimmer
+rimose
+rimous
+rimple
+rinded
+ringed
+ringer
+rinsed
+rinser
+rinses
+riojas
+rioted
+rioter
+ripely
+ripens
+ripest
+riping
+ripoff
+ripost
+ripped
+ripper
+ripple
+ripply
+riprap
+ripsaw
+risers
+rishis
+rising
+risked
+risker
+risque
+ristra
+ritard
+ritter
+ritual
+ritzes
+rivage
+rivals
+rivers
+rivets
+riving
+riyals
+roadeo
+roadie
+roamed
+roamer
+roared
+roarer
+roasts
+robalo
+roband
+robbed
+robber
+robbin
+robing
+robins
+robles
+robots
+robust
+rochet
+rocked
+rocker
+rocket
+rococo
+rodded
+rodent
+rodeos
+rodman
+rodmen
+rogers
+rogued
+rogues
+roiled
+rolfed
+rolfer
+rolled
+roller
+romaji
+romano
+romans
+romeos
+romped
+romper
+rondel
+rondos
+ronion
+ronnel
+ronyon
+roofed
+roofer
+roofie
+rooked
+rookie
+roomed
+roomer
+roomie
+roosed
+rooser
+rooses
+roosts
+rooted
+rooter
+rootle
+ropers
+ropery
+ropier
+ropily
+roping
+roques
+roquet
+rosary
+roscoe
+rosery
+rosets
+roshis
+rosier
+rosily
+rosing
+rosins
+rosiny
+roster
+rostra
+rotary
+rotate
+rotche
+rotgut
+rotors
+rotted
+rotten
+rotter
+rottes
+rotund
+rouble
+rouche
+rouens
+rouged
+rouges
+roughs
+roughy
+rounds
+rouped
+roupet
+roused
+rouser
+rouses
+rousts
+routed
+router
+routes
+rouths
+rovers
+roving
+rowans
+rowels
+rowens
+rowers
+rowing
+rowths
+royals
+rozzer
+ruanas
+rubace
+rubati
+rubato
+rubbed
+rubber
+rubble
+rubbly
+rubels
+rubied
+rubier
+rubies
+rubigo
+rubles
+ruboff
+rubout
+rubric
+ruched
+ruches
+rucked
+ruckle
+ruckus
+rudder
+ruddle
+rudely
+rudery
+rudest
+rueful
+ruffed
+ruffes
+ruffle
+ruffly
+rufous
+rugate
+rugged
+rugger
+rugola
+rugosa
+rugose
+rugous
+ruined
+ruiner
+rulers
+rulier
+ruling
+rumaki
+rumbas
+rumble
+rumbly
+rumens
+rumina
+rummer
+rumors
+rumour
+rumple
+rumply
+rumpus
+rundle
+runkle
+runlet
+runnel
+runner
+runoff
+runout
+runway
+rupees
+rupiah
+rurban
+rushed
+rushee
+rusher
+rushes
+rusine
+russet
+rusted
+rustic
+rustle
+rutile
+rutins
+rutted
+ryking
+ryokan
+sabals
+sabbat
+sabbed
+sabers
+sabine
+sabins
+sabirs
+sables
+sabots
+sabras
+sabred
+sabres
+sacbut
+sachem
+sachet
+sacked
+sacker
+sacque
+sacral
+sacred
+sacrum
+sadden
+sadder
+saddhu
+saddle
+sadhes
+sadhus
+sadism
+sadist
+safari
+safely
+safest
+safety
+safrol
+sagbut
+sagely
+sagest
+saggar
+sagged
+sagger
+sagier
+sahibs
+saices
+saigas
+sailed
+sailer
+sailor
+saimin
+sained
+saints
+saithe
+saiyid
+sajous
+sakers
+salaam
+salads
+salals
+salami
+salary
+saleps
+salify
+salina
+saline
+saliva
+sallet
+sallow
+salmis
+salmon
+salols
+salons
+saloon
+saloop
+salpae
+salpas
+salpid
+salsas
+salted
+salter
+saltie
+saluki
+salute
+salved
+salver
+salves
+salvia
+salvor
+salvos
+samara
+sambal
+sambar
+sambas
+sambos
+sambur
+samech
+samekh
+sameks
+samiel
+samite
+samlet
+samosa
+sampan
+sample
+samshu
+sancta
+sandal
+sanded
+sander
+sandhi
+sanely
+sanest
+sangar
+sangas
+sanger
+sanghs
+sanies
+saning
+sanity
+sanjak
+sannop
+sannup
+sansar
+sansei
+santir
+santol
+santos
+santur
+sapors
+sapota
+sapote
+sapour
+sapped
+sapper
+sarans
+sarape
+sardar
+sarees
+sarges
+sargos
+sarins
+sarode
+sarods
+sarong
+sarsar
+sarsen
+sartor
+sashay
+sashed
+sashes
+sasins
+sassed
+sasses
+satang
+satara
+satays
+sateen
+sating
+satins
+satiny
+satire
+satori
+satrap
+satyrs
+sauced
+saucer
+sauces
+sauchs
+sauger
+saughs
+saughy
+saults
+saunas
+saurel
+sauted
+sautes
+savage
+savant
+savate
+savers
+savine
+saving
+savins
+savior
+savors
+savory
+savour
+savoys
+sawers
+sawfly
+sawing
+sawlog
+sawney
+sawyer
+saxony
+sayeds
+sayers
+sayest
+sayids
+saying
+sayyid
+scabby
+scalar
+scalds
+scaled
+scaler
+scales
+scalls
+scalps
+scampi
+scamps
+scants
+scanty
+scaped
+scapes
+scarab
+scarce
+scared
+scarer
+scares
+scarey
+scarfs
+scarph
+scarps
+scarry
+scarts
+scathe
+scatts
+scatty
+scaups
+scaurs
+scenas
+scends
+scenes
+scenic
+scents
+schavs
+schema
+scheme
+schism
+schist
+schizo
+schizy
+schlep
+schlub
+schmoe
+schmos
+schnoz
+school
+schorl
+schrik
+schrod
+schtik
+schuit
+schuln
+schuls
+schuss
+schwas
+scilla
+scions
+sclaff
+sclera
+scoffs
+scolds
+scolex
+sconce
+scones
+scooch
+scoops
+scoots
+scoped
+scopes
+scorch
+scored
+scorer
+scores
+scoria
+scorns
+scotch
+scoter
+scotia
+scours
+scouse
+scouth
+scouts
+scowed
+scowls
+scrags
+scrams
+scrape
+scraps
+scrawl
+screak
+scream
+screed
+screen
+screes
+screws
+screwy
+scribe
+scried
+scries
+scrimp
+scrims
+scrips
+script
+scrive
+scrods
+scroll
+scroop
+scrota
+scrubs
+scruff
+scrums
+scubas
+scuffs
+sculch
+sculks
+sculls
+sculps
+sculpt
+scummy
+scurfs
+scurfy
+scurry
+scurvy
+scutch
+scutes
+scutum
+scuzzy
+scyphi
+scythe
+seabag
+seabed
+seadog
+sealed
+sealer
+seaman
+seamed
+seamen
+seamer
+seance
+search
+seared
+searer
+season
+seated
+seater
+seawan
+seaway
+sebums
+secant
+seccos
+secede
+secern
+second
+secpar
+secret
+sector
+secund
+secure
+sedans
+sedate
+seders
+sedges
+sedile
+seduce
+sedums
+seeded
+seeder
+seeing
+seeker
+seeled
+seemed
+seemer
+seemly
+seeped
+seesaw
+seethe
+seggar
+segnos
+segued
+segues
+seiche
+seidel
+seined
+seiner
+seines
+seised
+seiser
+seises
+seisin
+seisms
+seisor
+seitan
+seized
+seizer
+seizes
+seizin
+seizor
+sejant
+selahs
+seldom
+select
+selfed
+selkie
+seller
+selles
+selsyn
+selvas
+selves
+sememe
+semple
+sempre
+senary
+senate
+sendal
+sended
+sender
+sendup
+seneca
+senega
+senhor
+senile
+senior
+seniti
+sennas
+sennet
+sennit
+senora
+senors
+senryu
+sensed
+sensei
+senses
+sensor
+sensum
+sentry
+sepals
+sepias
+sepoys
+sepses
+sepsis
+septal
+septet
+septic
+septum
+sequel
+sequin
+seracs
+serail
+serais
+serape
+seraph
+serdab
+serein
+serene
+serest
+serged
+serger
+serges
+serial
+series
+serifs
+serine
+sering
+serins
+sermon
+serosa
+serous
+serows
+serums
+serval
+served
+server
+serves
+servos
+sesame
+sestet
+setoff
+setons
+setose
+setous
+setout
+settee
+setter
+settle
+setups
+sevens
+severe
+severs
+sewage
+sewans
+sewars
+sewers
+sewing
+shabby
+shacko
+shacks
+shaded
+shader
+shades
+shadow
+shaduf
+shafts
+shaggy
+shaird
+shairn
+shaken
+shaker
+shakes
+shakos
+shaled
+shales
+shaley
+shalom
+shaman
+shamas
+shamed
+shames
+shammy
+shamos
+shamoy
+shamus
+shandy
+shanks
+shanny
+shanti
+shanty
+shaped
+shapen
+shaper
+shapes
+shards
+shared
+sharer
+shares
+sharia
+sharif
+sharks
+sharns
+sharny
+sharps
+sharpy
+shaugh
+shauls
+shaved
+shaven
+shaver
+shaves
+shavie
+shawed
+shawls
+shawms
+shazam
+sheafs
+sheals
+shears
+sheath
+sheave
+sheens
+sheeny
+sheers
+sheesh
+sheets
+sheeve
+sheikh
+sheiks
+sheila
+shekel
+shells
+shelly
+shelta
+shelty
+shelve
+shelvy
+shends
+sheols
+sheqel
+sherds
+sherif
+sherpa
+sherry
+sheuch
+sheugh
+shewed
+shewer
+shibah
+shield
+shiels
+shiers
+shiest
+shifts
+shifty
+shikar
+shiksa
+shikse
+shills
+shimmy
+shindy
+shined
+shiner
+shines
+shinny
+shires
+shirks
+shirrs
+shirts
+shirty
+shists
+shivah
+shivas
+shiver
+shives
+shlepp
+shleps
+shlock
+shlubs
+shlump
+shmear
+shmoes
+shmuck
+shnaps
+shnook
+shoals
+shoaly
+shoats
+shocks
+shoddy
+shoers
+shofar
+shogis
+shogun
+shojis
+sholom
+shooed
+shooks
+shools
+shoots
+shoppe
+shoran
+shored
+shores
+shorls
+shorts
+shorty
+shotes
+shotts
+should
+shouts
+shoved
+shovel
+shover
+shoves
+showed
+shower
+shoyus
+shrank
+shreds
+shrewd
+shrews
+shriek
+shrift
+shrike
+shrill
+shrimp
+shrine
+shrink
+shrive
+shroff
+shroud
+shrove
+shrubs
+shrugs
+shrunk
+shtetl
+shtick
+shtiks
+shucks
+shunts
+shuted
+shutes
+shyers
+shyest
+shying
+sialic
+sialid
+sibyls
+siccan
+sicced
+sicked
+sickee
+sicken
+sicker
+sickie
+sickle
+sickly
+sickos
+siddur
+siding
+sidled
+sidler
+sidles
+sieged
+sieges
+sienna
+sierra
+siesta
+sieurs
+sieved
+sieves
+sifaka
+sifted
+sifter
+sighed
+sigher
+sights
+sigils
+sigloi
+siglos
+siglum
+sigmas
+signal
+signed
+signee
+signer
+signet
+signor
+silage
+silane
+sileni
+silent
+silica
+silked
+silken
+silkie
+siller
+siloed
+silted
+silvae
+silvan
+silvas
+silver
+silvex
+simars
+simian
+simile
+simlin
+simmer
+simnel
+simony
+simoom
+simoon
+simper
+simple
+simply
+sinews
+sinewy
+sinful
+singed
+singer
+singes
+single
+singly
+sinker
+sinned
+sinner
+sinter
+siphon
+siping
+sipped
+sipper
+sippet
+sirdar
+sirees
+sirens
+siring
+sirrah
+sirras
+sirree
+sirups
+sirupy
+sisals
+siskin
+sisses
+sister
+sistra
+sitars
+sitcom
+siting
+sitten
+sitter
+situps
+sivers
+sixmos
+sixtes
+sixths
+sizars
+sizers
+sizier
+sizing
+sizzle
+skalds
+skated
+skater
+skates
+skatol
+skeane
+skeans
+skeens
+skeets
+skeigh
+skeins
+skells
+skelms
+skelps
+skenes
+skerry
+sketch
+skewed
+skewer
+skibob
+skiddy
+skidoo
+skiers
+skiffs
+skiing
+skills
+skimos
+skimps
+skimpy
+skinks
+skinny
+skirls
+skirrs
+skirts
+skited
+skites
+skived
+skiver
+skives
+skivvy
+sklent
+skoals
+skorts
+skulks
+skulls
+skunks
+skunky
+skybox
+skycap
+skying
+skylit
+skyman
+skymen
+skyway
+slacks
+slaggy
+slaked
+slaker
+slakes
+slalom
+slangs
+slangy
+slants
+slanty
+slatch
+slated
+slater
+slates
+slatey
+slaved
+slaver
+slaves
+slavey
+slayed
+slayer
+sleave
+sleaze
+sleazo
+sleazy
+sledge
+sleeks
+sleeky
+sleeps
+sleepy
+sleets
+sleety
+sleeve
+sleigh
+sleuth
+slewed
+sliced
+slicer
+slices
+slicks
+slider
+slides
+sliest
+slieve
+slight
+slimed
+slimes
+slimly
+slimsy
+slings
+slinks
+slinky
+sliped
+slipes
+slippy
+slipup
+slitty
+sliver
+slobby
+slogan
+sloids
+slojds
+sloops
+sloped
+sloper
+slopes
+sloppy
+sloshy
+sloths
+slouch
+slough
+sloven
+slowed
+slower
+slowly
+sloyds
+sludge
+sludgy
+sluffs
+sluice
+sluicy
+sluing
+slummy
+slumps
+slurbs
+slurps
+slurry
+slushy
+slyest
+slypes
+smacks
+smalls
+smalti
+smalto
+smalts
+smarms
+smarmy
+smarts
+smarty
+smazes
+smears
+smeary
+smeeks
+smegma
+smells
+smelly
+smelts
+smerks
+smidge
+smilax
+smiled
+smiler
+smiles
+smiley
+smirch
+smirks
+smirky
+smiter
+smites
+smiths
+smithy
+smocks
+smoggy
+smoked
+smoker
+smokes
+smokey
+smolts
+smooch
+smoosh
+smooth
+smudge
+smudgy
+smugly
+smutch
+smutty
+snacks
+snafus
+snaggy
+snails
+snaked
+snakes
+snakey
+snappy
+snared
+snarer
+snares
+snarfs
+snarks
+snarky
+snarls
+snarly
+snatch
+snathe
+snaths
+snawed
+snazzy
+sneaks
+sneaky
+sneaps
+snecks
+sneers
+sneery
+sneesh
+sneeze
+sneezy
+snells
+snicks
+snider
+sniffs
+sniffy
+sniped
+sniper
+snipes
+snippy
+snitch
+snivel
+snobby
+snoods
+snooks
+snools
+snoops
+snoopy
+snoots
+snooty
+snooze
+snoozy
+snored
+snorer
+snores
+snorts
+snotty
+snouts
+snouty
+snowed
+snubby
+snuffs
+snuffy
+snugly
+soaked
+soaker
+soaped
+soaper
+soared
+soarer
+soaves
+sobbed
+sobber
+sobeit
+sobers
+sobful
+socage
+soccer
+social
+socked
+socket
+socles
+socman
+socmen
+sodded
+sodden
+sodium
+soever
+sofars
+soffit
+softas
+soften
+softer
+softie
+softly
+sogged
+soigne
+soiled
+soiree
+sokols
+solace
+soland
+solano
+solans
+solate
+soldan
+solder
+solely
+solemn
+soleus
+solgel
+solidi
+solids
+soling
+solion
+soloed
+solons
+solums
+solute
+solved
+solver
+solves
+somans
+somata
+somber
+sombre
+somite
+somoni
+sonant
+sonars
+sonata
+sonder
+sondes
+sonics
+sonnet
+sonsie
+sooner
+sooted
+soothe
+sooths
+sopite
+sopors
+sopped
+sorbed
+sorbet
+sorbic
+sordid
+sordor
+sorels
+sorely
+sorest
+sorgho
+sorgos
+soring
+sorned
+sorner
+sorrel
+sorrow
+sorted
+sorter
+sortie
+sotols
+sotted
+souari
+soucar
+soudan
+soughs
+sought
+souled
+sounds
+souped
+source
+soured
+sourer
+sourly
+soused
+souses
+souter
+souths
+soviet
+sovran
+sowans
+sowars
+sowcar
+sowens
+sowers
+sowing
+sozine
+sozins
+spaced
+spacer
+spaces
+spacey
+spaded
+spader
+spades
+spadix
+spahee
+spahis
+spails
+spaits
+spales
+spalls
+spanks
+spared
+sparer
+spares
+sparge
+sparid
+sparks
+sparky
+sparry
+sparse
+spasms
+spates
+spathe
+spavie
+spavin
+spawns
+spayed
+speaks
+speans
+spears
+specie
+specks
+speech
+speedo
+speeds
+speedy
+speels
+speers
+speils
+speirs
+speise
+speiss
+spells
+spelts
+speltz
+spence
+spends
+spendy
+spense
+spewed
+spewer
+sphene
+sphere
+sphery
+sphinx
+sphynx
+spicae
+spicas
+spiced
+spicer
+spices
+spicey
+spicks
+spider
+spiels
+spiers
+spiffs
+spiffy
+spigot
+spiked
+spiker
+spikes
+spikey
+spiled
+spiles
+spills
+spilth
+spinal
+spined
+spinel
+spines
+spinet
+spinny
+spinor
+spinto
+spiral
+spirea
+spired
+spirem
+spires
+spirit
+spirts
+spital
+spited
+spites
+spivvy
+splake
+splash
+splats
+splays
+spleen
+splent
+splice
+spliff
+spline
+splint
+splits
+splore
+splosh
+spodes
+spoils
+spoilt
+spoked
+spoken
+spokes
+sponge
+spongy
+spoofs
+spoofy
+spooks
+spooky
+spools
+spoons
+spoony
+spoors
+sporal
+spored
+spores
+sports
+sporty
+spotty
+spouse
+spouts
+sprags
+sprain
+sprang
+sprats
+sprawl
+sprays
+spread
+sprees
+sprent
+sprier
+sprigs
+spring
+sprint
+sprite
+sprits
+spritz
+sprout
+spruce
+sprucy
+sprues
+sprugs
+sprung
+spryer
+spryly
+spuing
+spumed
+spumes
+spunks
+spunky
+spurge
+spurns
+spurry
+spying
+squabs
+squads
+squall
+squama
+square
+squark
+squash
+squats
+squawk
+squaws
+squeak
+squeal
+squegs
+squibs
+squids
+squill
+squint
+squire
+squirm
+squirt
+squish
+squush
+sradha
+stable
+stably
+stacks
+stacte
+stades
+stadia
+staffs
+staged
+stager
+stages
+stagey
+staggy
+staigs
+stains
+stairs
+staked
+stakes
+stalag
+staled
+staler
+stales
+stalks
+stalky
+stalls
+stamen
+stamps
+stance
+stanch
+stands
+staned
+stanes
+stangs
+stanks
+stanol
+stanza
+stapes
+staphs
+staple
+starch
+stared
+starer
+stares
+starry
+starts
+starve
+stases
+stasis
+statal
+stated
+stater
+states
+static
+statin
+stator
+statue
+status
+staved
+staves
+stayed
+stayer
+steads
+steady
+steaks
+steals
+steams
+steamy
+steeds
+steeks
+steels
+steely
+steeps
+steers
+steeve
+steins
+stelae
+stelai
+stelar
+steles
+stelic
+stella
+stemma
+stemmy
+stench
+stenos
+stents
+steppe
+stereo
+steres
+steric
+sterna
+sterns
+sterol
+stewed
+stichs
+sticks
+sticky
+stiffs
+stifle
+stigma
+stiles
+stills
+stilly
+stilts
+stimes
+stingo
+stings
+stingy
+stinko
+stinks
+stinky
+stints
+stiped
+stipel
+stipes
+stirks
+stirps
+stitch
+stithy
+stiver
+stoats
+stocks
+stocky
+stodge
+stodgy
+stogey
+stogie
+stoics
+stoked
+stoker
+stokes
+stoled
+stolen
+stoles
+stolid
+stolon
+stomal
+stomas
+stomps
+stoned
+stoner
+stones
+stoney
+stooge
+stooks
+stools
+stoops
+stoped
+stoper
+stopes
+storax
+stored
+storer
+stores
+storey
+storks
+storms
+stormy
+stotin
+stotts
+stound
+stoups
+stoure
+stours
+stoury
+stouts
+stover
+stoves
+stowed
+stowps
+strafe
+strain
+strait
+strake
+strand
+strang
+straps
+strass
+strata
+strath
+strati
+straws
+strawy
+strays
+streak
+stream
+streek
+streel
+street
+streps
+stress
+strewn
+strews
+striae
+strick
+strict
+stride
+strife
+strike
+string
+stripe
+strips
+stript
+stripy
+strive
+strobe
+strode
+stroke
+stroll
+stroma
+strong
+strook
+strops
+stroud
+strove
+strown
+strows
+stroys
+struck
+struma
+strums
+strung
+strunt
+struts
+stubby
+stucco
+studio
+studly
+stuffs
+stuffy
+stulls
+stumps
+stumpy
+stunts
+stupas
+stupes
+stupor
+sturdy
+sturts
+stying
+stylar
+styled
+styler
+styles
+stylet
+stylus
+stymie
+styrax
+suable
+suably
+suaver
+subahs
+subbed
+subdeb
+subdue
+subers
+subfix
+subgum
+subito
+sublet
+sublot
+submit
+subnet
+suborn
+subpar
+subsea
+subset
+subtle
+subtly
+suburb
+subway
+succah
+succor
+sucres
+sudary
+sudden
+sudors
+sudsed
+sudser
+sudses
+sueded
+suedes
+suffer
+suffix
+sugars
+sugary
+sughed
+suints
+suited
+suiter
+suites
+suitor
+sukkah
+sukkot
+sulcal
+sulcus
+suldan
+sulfas
+sulfid
+sulfur
+sulked
+sulker
+sullen
+sulpha
+sultan
+sultry
+sumach
+sumacs
+summae
+summas
+summed
+summer
+summit
+summon
+sunbow
+sundae
+sunder
+sundew
+sundog
+sundry
+sunken
+sunket
+sunlit
+sunnah
+sunnas
+sunned
+sunray
+sunset
+suntan
+sunups
+superb
+supers
+supine
+supped
+supper
+supple
+supply
+surahs
+surely
+surest
+surety
+surfed
+surfer
+surged
+surger
+surges
+surimi
+surras
+surrey
+surtax
+survey
+sushis
+suslik
+sussed
+susses
+sutler
+sutras
+suttas
+suttee
+suture
+svaraj
+svelte
+swabby
+swaged
+swager
+swages
+swails
+swains
+swales
+swamis
+swamps
+swampy
+swanks
+swanky
+swanny
+swaraj
+swards
+swarfs
+swarms
+swarth
+swarty
+swatch
+swathe
+swaths
+swayed
+swayer
+swears
+sweats
+sweaty
+swedes
+sweeny
+sweeps
+sweepy
+sweets
+swells
+swerve
+sweven
+swifts
+swills
+swimmy
+swinge
+swings
+swingy
+swinks
+swiped
+swipes
+swiple
+swirls
+swirly
+swishy
+switch
+swithe
+swived
+swivel
+swives
+swivet
+swoons
+swoony
+swoops
+swoopy
+swoosh
+swords
+swound
+swouns
+syboes
+sycees
+sylphs
+sylphy
+sylvae
+sylvan
+sylvas
+sylvin
+symbol
+synced
+synchs
+syncom
+syndet
+syndic
+syngas
+synods
+syntax
+synths
+synura
+sypher
+syphon
+syrens
+syrinx
+syrups
+syrupy
+sysops
+system
+syzygy
+tabard
+tabbed
+tabbis
+tabers
+tablas
+tabled
+tables
+tablet
+taboos
+tabors
+tabour
+tabued
+tabuli
+tabuns
+taches
+tacked
+tacker
+tacket
+tackey
+tackle
+tactic
+taenia
+taffia
+tafias
+tagged
+tagger
+tagrag
+tahini
+tahsil
+taigas
+tailed
+tailer
+taille
+tailor
+taints
+taipan
+takahe
+takers
+takeup
+taking
+takins
+talars
+talced
+talcky
+talcum
+talent
+talers
+talion
+talked
+talker
+talkie
+taller
+tallis
+tallit
+tallol
+tallow
+talons
+taluka
+taluks
+tamale
+tamals
+tamari
+tambac
+tambak
+tambur
+tamein
+tamely
+tamers
+tamest
+taming
+tammie
+tampan
+tamped
+tamper
+tampon
+tandem
+tanged
+tangle
+tangly
+tangos
+tanist
+tankas
+tanked
+tanker
+tanned
+tanner
+tannic
+tannin
+tannoy
+tanrec
+tantra
+tanuki
+tapalo
+tapers
+tapeta
+taping
+tapirs
+tapped
+tapper
+tappet
+tarama
+targes
+target
+tariff
+taring
+tarmac
+tarnal
+tarocs
+taroks
+tarots
+tarpan
+tarpon
+tarred
+tarres
+tarsal
+tarsia
+tarsus
+tartan
+tartar
+tarted
+tarter
+tartly
+tarzan
+tasked
+tassel
+tasses
+tasset
+tassie
+tasted
+taster
+tastes
+tatami
+tatars
+taters
+tatsoi
+tatted
+tatter
+tattie
+tattle
+tattoo
+taught
+taunts
+tauons
+taupes
+tauted
+tauten
+tauter
+tautly
+tautog
+tavern
+tawdry
+tawers
+tawing
+tawney
+tawpie
+tawsed
+tawses
+taxeme
+taxers
+taxied
+taxies
+taxing
+taxite
+taxman
+taxmen
+taxols
+taxons
+tazzas
+teabox
+teacup
+teamed
+teapot
+teapoy
+teared
+tearer
+teased
+teasel
+teaser
+teases
+teated
+teazel
+teazle
+teched
+techie
+techno
+tectal
+tectum
+tedded
+tedder
+tedium
+teeing
+teemed
+teemer
+teener
+teensy
+teepee
+teeter
+teethe
+teflon
+tegmen
+teguas
+teiids
+teinds
+tekkie
+telcos
+teledu
+telega
+telfer
+telial
+telium
+teller
+tellys
+telnet
+telome
+telson
+temped
+tempeh
+temper
+temple
+tempos
+tempts
+tenace
+tenail
+tenant
+tended
+tender
+tendon
+tendus
+tenets
+teniae
+tenias
+tenner
+tennis
+tenons
+tenors
+tenour
+tenpin
+tenrec
+tensed
+tenser
+tenses
+tensor
+tented
+tenter
+tenths
+tentie
+tenues
+tenuis
+tenure
+tenuti
+tenuto
+teopan
+tepals
+tepees
+tepefy
+tephra
+tepoys
+terais
+teraph
+terbia
+terbic
+tercel
+terces
+tercet
+teredo
+terete
+tergal
+tergum
+termed
+termer
+termly
+termor
+ternes
+terrae
+terras
+terret
+territ
+terror
+terser
+teslas
+testae
+tested
+testee
+tester
+testes
+testis
+teston
+tetany
+tetchy
+tether
+tetrad
+tetras
+tetris
+tetryl
+tetter
+tewing
+thacks
+thairm
+thaler
+thalli
+thanes
+thanks
+tharms
+thatch
+thawed
+thawer
+thebes
+thecae
+thecal
+thefts
+thegns
+theine
+theins
+theirs
+theism
+theist
+themed
+themes
+thenal
+thenar
+thence
+theory
+theres
+therme
+therms
+theses
+thesis
+thesps
+thetas
+thetic
+thicks
+thieve
+thighs
+thills
+things
+thinks
+thinly
+thiols
+thiram
+thirds
+thirls
+thirst
+thirty
+tholed
+tholes
+tholoi
+tholos
+thongs
+thorax
+thoria
+thoric
+thorns
+thorny
+thoron
+thorpe
+thorps
+thoued
+though
+thrall
+thrash
+thrave
+thrawn
+thraws
+thread
+threap
+threat
+threep
+threes
+thresh
+thrice
+thrift
+thrill
+thrips
+thrive
+throat
+throbs
+throes
+throne
+throng
+throve
+thrown
+throws
+thrums
+thrush
+thrust
+thujas
+thulia
+thumbs
+thumps
+thunks
+thurls
+thusly
+thuyas
+thwack
+thwart
+thymes
+thymey
+thymic
+thymol
+thymus
+thyrse
+thyrsi
+tiaras
+tibiae
+tibial
+tibias
+ticals
+ticced
+ticked
+ticker
+ticket
+tickle
+tictac
+tictoc
+tidbit
+tiddly
+tidied
+tidier
+tidies
+tidily
+tiding
+tieing
+tiepin
+tierce
+tiered
+tiffed
+tiffin
+tigers
+tights
+tiglon
+tigons
+tikkas
+tilaks
+tildes
+tilers
+tiling
+tilled
+tiller
+tilted
+tilter
+tilths
+timbal
+timber
+timbre
+timely
+timers
+timing
+tincal
+tincts
+tinder
+tineal
+tineas
+tineid
+tinful
+tinged
+tinges
+tingle
+tingly
+tinier
+tinily
+tining
+tinker
+tinkle
+tinkly
+tinman
+tinmen
+tinned
+tinner
+tinpot
+tinsel
+tinted
+tinter
+tipcat
+tipoff
+tipped
+tipper
+tippet
+tipple
+tiptoe
+tiptop
+tirade
+tiring
+tirled
+tisane
+tissue
+titans
+tmeses
+tmesis
+toasts
+toasty
+tobies
+tocher
+tocsin
+todays
+toddle
+todies
+toecap
+toeing
+toffee
+togaed
+togate
+togged
+toggle
+togues
+toiled
+toiler
+toiles
+toited
+tokays
+tokens
+tokers
+toking
+tolane
+tolans
+tolars
+toledo
+toling
+tolled
+toller
+toluic
+toluid
+toluol
+toluyl
+tolyls
+tomans
+tomato
+tombac
+tombak
+tombal
+tombed
+tomboy
+tomcat
+tomcod
+tommed
+tomtit
+tondos
+toneme
+toners
+tongas
+tonged
+tonger
+tongue
+tonics
+tonier
+toning
+tonish
+tonlet
+tonner
+tonnes
+tonsil
+tooled
+tooler
+toonie
+tooted
+tooter
+tooths
+toothy
+tootle
+tootsy
+topees
+topers
+topful
+tophes
+tophus
+topics
+toping
+topped
+topper
+topple
+toques
+toquet
+torahs
+torchy
+torero
+torics
+tories
+toroid
+torose
+toroth
+torous
+torpid
+torpor
+torque
+torrid
+torses
+torsks
+torsos
+tortas
+torten
+tortes
+torula
+toshes
+tossed
+tosser
+tosses
+tossup
+totals
+totems
+toters
+tother
+toting
+totted
+totter
+toucan
+touche
+touchy
+toughs
+toughy
+toupee
+toured
+tourer
+toused
+touses
+tousle
+touted
+touter
+touzle
+towage
+toward
+towels
+towers
+towery
+towhee
+towies
+towing
+townee
+townie
+toxics
+toxine
+toxins
+toxoid
+toyers
+toying
+toyish
+toyons
+traced
+tracer
+traces
+tracks
+tracts
+traded
+trader
+trades
+tragic
+tragus
+traiks
+trails
+trains
+traits
+tramel
+tramps
+trampy
+trance
+tranks
+tranny
+tranqs
+trapan
+trapes
+trashy
+trauma
+travel
+traves
+trawls
+treads
+treats
+treaty
+treble
+trebly
+treens
+trefah
+tremor
+trench
+trends
+trendy
+trepan
+trepid
+tressy
+trevet
+triacs
+triads
+triage
+trials
+tribal
+tribes
+triced
+tricep
+trices
+tricks
+tricky
+tricot
+triene
+triens
+triers
+trifid
+trifle
+trigly
+trigon
+trigos
+trijet
+trikes
+trilby
+trills
+trimer
+trimly
+trinal
+trined
+trines
+triode
+triols
+triose
+tripes
+triple
+triply
+tripod
+tripos
+trippy
+triste
+triter
+triton
+triune
+trivet
+trivia
+troaks
+trocar
+troche
+trocks
+trogon
+troika
+troked
+trokes
+trolls
+trolly
+trompe
+tromps
+tronas
+trones
+troops
+tropes
+trophy
+tropic
+tropin
+troths
+trotyl
+trough
+troupe
+trouts
+trouty
+trover
+troves
+trowed
+trowel
+trowth
+truant
+truced
+truces
+trucks
+trudge
+truest
+truffe
+truing
+truism
+trulls
+trumps
+trunks
+trusts
+trusty
+truths
+trying
+tryout
+tryste
+trysts
+tsades
+tsadis
+tsetse
+tsking
+tsktsk
+tsores
+tsoris
+tsuris
+tubate
+tubbed
+tubber
+tubers
+tubful
+tubing
+tubist
+tubule
+tuchun
+tucked
+tucker
+tucket
+tuffet
+tufoli
+tufted
+tufter
+tugged
+tugger
+tugrik
+tuille
+tuladi
+tulips
+tulles
+tumble
+tumefy
+tumors
+tumour
+tumped
+tumuli
+tumult
+tundra
+tuners
+tuneup
+tunica
+tunics
+tuning
+tunned
+tunnel
+tupelo
+tupiks
+tupped
+tuques
+turaco
+turban
+turbid
+turbit
+turbos
+turbot
+tureen
+turfed
+turgid
+turgor
+turion
+turkey
+turned
+turner
+turnip
+turnon
+turnup
+turret
+turtle
+turves
+tusche
+tushed
+tushes
+tushie
+tusked
+tusker
+tussah
+tussal
+tussar
+tusseh
+tusser
+tusses
+tussis
+tussle
+tussor
+tussur
+tutees
+tutors
+tutted
+tuttis
+tutued
+tuxedo
+tuyere
+tuyers
+twains
+twangs
+twangy
+twanky
+tweaks
+tweaky
+tweeds
+tweedy
+tweens
+tweeny
+tweets
+tweeze
+twelve
+twenty
+twerps
+twibil
+twiers
+twiggy
+twilit
+twills
+twined
+twiner
+twines
+twinge
+twirls
+twirly
+twirps
+twists
+twisty
+twitch
+twofer
+twyers
+tycoon
+tymbal
+tympan
+tyning
+typhon
+typhus
+typier
+typify
+typing
+typist
+tyrant
+tyring
+tythed
+tythes
+tzetze
+tzuris
+uakari
+ubiety
+ubique
+udders
+uglier
+uglies
+uglify
+uglily
+ugsome
+uhlans
+ukases
+ulamas
+ulcers
+ulemas
+ullage
+ulster
+ultima
+ultimo
+ultras
+umamis
+umbels
+umbers
+umbles
+umbrae
+umbral
+umbras
+umiack
+umiacs
+umiaks
+umiaqs
+umlaut
+umping
+umpire
+unable
+unaged
+unakin
+unarms
+unawed
+unaxed
+unbale
+unbans
+unbars
+unbear
+unbelt
+unbend
+unbent
+unbind
+unbolt
+unborn
+unbred
+unbusy
+uncage
+uncake
+uncaps
+uncase
+uncast
+unchic
+unciae
+uncial
+uncini
+unclad
+uncles
+unclip
+unclog
+uncoil
+uncool
+uncork
+uncuff
+uncurb
+uncurl
+uncute
+undead
+undies
+undine
+undock
+undoer
+undoes
+undone
+undraw
+undrew
+unduly
+undyed
+unease
+uneasy
+uneven
+unfair
+unfelt
+unfits
+unfixt
+unfold
+unfond
+unfree
+unfurl
+ungird
+ungirt
+unglue
+ungual
+ungues
+unguis
+ungula
+unhair
+unhand
+unhang
+unhats
+unhelm
+unhewn
+unholy
+unhood
+unhook
+unhung
+unhurt
+unhusk
+unific
+unions
+unipod
+unique
+unisex
+unison
+united
+uniter
+unites
+unjams
+unjust
+unkend
+unkent
+unkept
+unkind
+unkink
+unknit
+unknot
+unlace
+unlade
+unlaid
+unlash
+unlays
+unlead
+unless
+unlike
+unlink
+unlive
+unload
+unlock
+unmade
+unmake
+unmans
+unmask
+unmeet
+unmesh
+unmews
+unmixt
+unmold
+unmoor
+unmown
+unnail
+unopen
+unpack
+unpaid
+unpegs
+unpens
+unpent
+unpick
+unpile
+unpins
+unplug
+unpure
+unread
+unreal
+unreel
+unrent
+unrest
+unrigs
+unripe
+unrips
+unrobe
+unroll
+unroof
+unroot
+unrove
+unruly
+unsafe
+unsaid
+unsawn
+unsays
+unseal
+unseam
+unseat
+unseen
+unsell
+unsent
+unsets
+unsewn
+unsews
+unsexy
+unshed
+unship
+unshod
+unshut
+unsnag
+unsnap
+unsold
+unsown
+unspun
+unstep
+unstop
+unsung
+unsunk
+unsure
+untack
+untame
+untidy
+untied
+unties
+untold
+untorn
+untrim
+untrod
+untrue
+untuck
+untune
+unused
+unveil
+unvext
+unwary
+unwell
+unwept
+unwind
+unwise
+unwish
+unwits
+unworn
+unwove
+unwrap
+unyoke
+unzips
+upases
+upbear
+upbeat
+upbind
+upboil
+upbore
+upbows
+upcast
+upcoil
+upcurl
+updart
+update
+updive
+updove
+upends
+upflow
+upfold
+upgaze
+upgird
+upgirt
+upgrew
+upgrow
+upheap
+upheld
+uphill
+uphold
+uphove
+uphroe
+upkeep
+upland
+upleap
+uplift
+uplink
+upload
+upmost
+uppers
+uppile
+upping
+uppish
+uppity
+upprop
+uprate
+uprear
+uprise
+uproar
+uproot
+uprose
+uprush
+upsend
+upsent
+upsets
+upshot
+upside
+upsize
+upsoar
+upstep
+upstir
+uptake
+uptalk
+uptear
+uptick
+uptilt
+uptime
+uptore
+uptorn
+uptoss
+uptown
+upturn
+upwaft
+upward
+upwell
+upwind
+uracil
+uraeus
+urania
+uranic
+uranyl
+urares
+uraris
+urases
+urates
+uratic
+urbane
+urbias
+urchin
+urease
+uredia
+uredos
+ureide
+uremia
+uremic
+ureter
+uretic
+urgent
+urgers
+urging
+urials
+urinal
+urines
+uropod
+urping
+ursids
+ursine
+urtext
+uruses
+usable
+usably
+usages
+usance
+useful
+ushers
+usneas
+usques
+usuals
+usurer
+usurps
+uterus
+utmost
+utopia
+utters
+uveous
+uvulae
+uvular
+uvulas
+vacant
+vacate
+vacuum
+vadose
+vagary
+vagile
+vagrom
+vaguer
+vahine
+vailed
+vainer
+vainly
+vakeel
+vakils
+valets
+valgus
+valine
+valise
+valkyr
+valley
+valors
+valour
+valses
+valued
+valuer
+values
+valuta
+valval
+valvar
+valved
+valves
+vamose
+vamped
+vamper
+vandal
+vandas
+vanish
+vanity
+vanman
+vanmen
+vanned
+vanner
+vapors
+vapory
+vapour
+varias
+varied
+varier
+varies
+varlet
+varnas
+varoom
+varved
+varves
+vassal
+vaster
+vastly
+vatful
+vatted
+vaults
+vaulty
+vaunts
+vaunty
+vaward
+vealed
+vealer
+vector
+veejay
+veenas
+veepee
+veered
+vegans
+vegete
+vegged
+veggie
+vegies
+veiled
+veiler
+veinal
+veined
+veiner
+velars
+velate
+velcro
+veldts
+vellum
+veloce
+velour
+velure
+velvet
+vended
+vendee
+vender
+vendor
+vendue
+veneer
+venene
+venery
+venged
+venges
+venial
+venine
+venins
+venire
+venoms
+venose
+venous
+vented
+venter
+venues
+venule
+verbal
+verbid
+verdin
+verged
+verger
+verges
+verier
+verify
+verily
+verism
+verist
+verite
+verity
+vermes
+vermin
+vermis
+vernal
+vernix
+versal
+versed
+verser
+verses
+verset
+versos
+verste
+versts
+versus
+vertex
+vertus
+verves
+vervet
+vesica
+vesper
+vespid
+vessel
+vestal
+vestas
+vested
+vestee
+vestry
+vetoed
+vetoer
+vetoes
+vetted
+vetter
+vexers
+vexils
+vexing
+viable
+viably
+vialed
+viands
+viatic
+viator
+vibist
+vibrio
+vicars
+vicing
+victim
+victor
+vicuna
+videos
+viewed
+viewer
+vigias
+vigils
+vigors
+vigour
+viking
+vilely
+vilest
+vilify
+villae
+villas
+villus
+vimina
+vinals
+vincas
+vineal
+vinery
+vinier
+vinify
+vining
+vinous
+vinyls
+violas
+violet
+violin
+vipers
+virago
+vireos
+virgas
+virgin
+virile
+virion
+viroid
+virtue
+virtus
+visaed
+visage
+visard
+viscid
+viscus
+viseed
+vising
+vision
+visits
+visive
+visors
+vistas
+visual
+vitals
+vitric
+vittae
+vittle
+vivace
+vivary
+vivers
+vivify
+vixens
+vizard
+vizier
+vizirs
+vizors
+vizsla
+vocabs
+vocals
+vodkas
+vodoun
+vodous
+voduns
+vogued
+voguer
+vogues
+voiced
+voicer
+voices
+voided
+voider
+voiles
+volant
+volery
+voling
+volley
+volost
+voltes
+volume
+volute
+volvas
+volvox
+vomers
+vomica
+voodoo
+vortex
+votary
+voters
+voting
+votive
+voudon
+vowels
+vowers
+vowing
+voyage
+voyeur
+vrooms
+vrouws
+vulgar
+vulgus
+vulvae
+vulval
+vulvar
+vulvas
+wabble
+wabbly
+wacker
+wackes
+wackos
+wadded
+wadder
+waddie
+waddle
+waddly
+waders
+wadies
+wading
+wadmal
+wadmel
+wadmol
+wadset
+waeful
+wafers
+wafery
+waffed
+waffie
+waffle
+waffly
+wafted
+wafter
+wagers
+wagged
+wagger
+waggle
+waggly
+waggon
+waging
+wagons
+wahine
+wahoos
+waifed
+wailed
+wailer
+waired
+waists
+waited
+waiter
+waived
+waiver
+waives
+wakame
+wakens
+wakers
+wakiki
+waking
+walers
+walies
+waling
+walked
+walker
+walkup
+wallah
+wallas
+walled
+wallet
+wallie
+wallop
+wallow
+walnut
+walrus
+wamble
+wambly
+wammus
+wampum
+wampus
+wander
+wandle
+wangan
+wangle
+wangun
+wanier
+waning
+wanion
+wanned
+wanner
+wanted
+wanter
+wanton
+wapiti
+wapped
+warble
+warded
+warden
+warder
+warier
+warily
+waring
+warked
+warmed
+warmer
+warmly
+warmth
+warmup
+warned
+warner
+warped
+warper
+warred
+warren
+warsaw
+warsle
+warted
+wasabi
+washed
+washer
+washes
+washup
+wasted
+waster
+wastes
+wastry
+watape
+wataps
+waters
+watery
+watter
+wattle
+waucht
+waught
+wauked
+wauled
+wavers
+wavery
+waveys
+wavier
+wavies
+wavily
+waving
+wawled
+waxers
+waxier
+waxily
+waxing
+waylay
+wazoos
+weaken
+weaker
+weakly
+weakon
+wealds
+wealth
+weaned
+weaner
+weapon
+wearer
+weasel
+weason
+weaved
+weaver
+weaves
+webbed
+webcam
+webers
+webfed
+weblog
+wechts
+wedded
+wedder
+wedeln
+wedels
+wedged
+wedges
+wedgie
+weeded
+weeder
+weekly
+weened
+weenie
+weensy
+weeper
+weepie
+weeted
+weever
+weevil
+weewee
+weighs
+weight
+weiner
+weirdo
+weirds
+weirdy
+welded
+welder
+weldor
+welkin
+welled
+wellie
+welted
+welter
+wended
+weskit
+wester
+wether
+wetted
+wetter
+whacko
+whacks
+whacky
+whaled
+whaler
+whales
+whammo
+whammy
+whangs
+wharfs
+wharve
+whaups
+wheals
+wheats
+wheels
+wheens
+wheeps
+wheeze
+wheezy
+whelks
+whelky
+whelms
+whelps
+whenas
+whence
+wheres
+wherry
+wherve
+wheyey
+whidah
+whiffs
+whiled
+whiles
+whilom
+whilst
+whimsy
+whined
+whiner
+whines
+whiney
+whinge
+whinny
+whippy
+whirls
+whirly
+whirrs
+whirry
+whisht
+whisks
+whisky
+whists
+whited
+whiten
+whiter
+whites
+whitey
+whizzy
+wholes
+wholly
+whomps
+whomso
+whoofs
+whoops
+whoosh
+whored
+whores
+whorls
+whorts
+whosis
+whumps
+whydah
+wiccan
+wiccas
+wiches
+wicked
+wicker
+wicket
+wicopy
+widder
+widdie
+widdle
+widely
+widens
+widest
+widget
+widish
+widows
+widths
+wields
+wieldy
+wiener
+wienie
+wifely
+wifeys
+wifing
+wigans
+wigeon
+wigged
+wiggle
+wiggly
+wights
+wiglet
+wigwag
+wigwam
+wikiup
+wilded
+wilder
+wildly
+wilful
+wilier
+wilily
+wiling
+willed
+willer
+willet
+willie
+willow
+wilted
+wimble
+wimmin
+wimped
+wimple
+winced
+wincer
+winces
+wincey
+winded
+winder
+windle
+window
+windup
+winery
+winged
+winger
+winier
+wining
+winish
+winked
+winker
+winkle
+winned
+winner
+winnow
+winoes
+winter
+wintle
+wintry
+winzes
+wipers
+wiping
+wirers
+wirier
+wirily
+wiring
+wisdom
+wisely
+wisent
+wisest
+wished
+wisher
+wishes
+wising
+wisped
+wissed
+wisses
+wisted
+witans
+witchy
+withal
+withed
+wither
+withes
+within
+witing
+witney
+witted
+wittol
+wivern
+wivers
+wiving
+wizard
+wizens
+wizzen
+wizzes
+woaded
+woalds
+wobble
+wobbly
+wodges
+woeful
+wolfed
+wolfer
+wolver
+wolves
+womans
+wombat
+wombed
+womera
+wonder
+wonned
+wonner
+wonted
+wonton
+wooded
+wooden
+woodie
+woodsy
+wooers
+woofed
+woofer
+wooing
+wooled
+woolen
+wooler
+woolie
+woolly
+worded
+worked
+worker
+workup
+worlds
+wormed
+wormer
+wormil
+worrit
+worsen
+worser
+worses
+worset
+worsts
+worths
+worthy
+wotted
+wounds
+wovens
+wowing
+wowser
+wracks
+wraith
+wrangs
+wrasse
+wraths
+wrathy
+wreaks
+wreath
+wrecks
+wrench
+wrests
+wretch
+wricks
+wriest
+wright
+wrings
+wrists
+wristy
+writer
+writes
+writhe
+wrongs
+wryest
+wrying
+wursts
+wurzel
+wusses
+wuther
+wyches
+wyling
+wyting
+wyvern
+xebecs
+xenial
+xenias
+xenons
+xylans
+xylems
+xylene
+xyloid
+xylols
+xylose
+xylyls
+xyster
+xystoi
+xystos
+xystus
+yabber
+yabbie
+yachts
+yacked
+yaffed
+yagers
+yahoos
+yairds
+yakked
+yakker
+yakuza
+yamens
+yammer
+yamuns
+yanked
+yanqui
+yantra
+yapock
+yapoks
+yapons
+yapped
+yapper
+yarded
+yarder
+yarely
+yarest
+yarned
+yarner
+yarrow
+yasmak
+yatter
+yauped
+yauper
+yaupon
+yautia
+yawing
+yawled
+yawned
+yawner
+yawped
+yawper
+yclept
+yeaned
+yearly
+yearns
+yeasts
+yeasty
+yecchs
+yeelin
+yelled
+yeller
+yellow
+yelped
+yelper
+yenned
+yentas
+yentes
+yeoman
+yeomen
+yerbas
+yerked
+yessed
+yesses
+yester
+yeuked
+yields
+yipped
+yippee
+yippie
+yirred
+yirths
+yobbos
+yocked
+yodels
+yodled
+yodler
+yodles
+yogees
+yogini
+yogins
+yogurt
+yoicks
+yokels
+yoking
+yolked
+yonder
+yonker
+youngs
+youpon
+youths
+yowies
+yowing
+yowled
+yowler
+yttria
+yttric
+yuccas
+yucked
+yukked
+yulans
+yupons
+yuppie
+yutzes
+zaddik
+zaffar
+zaffer
+zaffir
+zaffre
+zaftig
+zagged
+zaikai
+zaires
+zamias
+zanana
+zander
+zanier
+zanies
+zanily
+zanzas
+zapped
+zapper
+zareba
+zariba
+zayins
+zazens
+zealot
+zeatin
+zebeck
+zebecs
+zebras
+zechin
+zenana
+zenith
+zephyr
+zeroed
+zeroes
+zeroth
+zested
+zester
+zeugma
+zibeth
+zibets
+zigged
+zigzag
+zillah
+zinced
+zincic
+zincky
+zinebs
+zinged
+zinger
+zinnia
+zipped
+zipper
+zirams
+zircon
+zither
+zizith
+zizzle
+zlotys
+zoaria
+zocalo
+zodiac
+zoecia
+zoftig
+zombie
+zombis
+zonary
+zonate
+zoners
+zoning
+zonked
+zonula
+zonule
+zooids
+zooier
+zoomed
+zoonal
+zooned
+zorils
+zoster
+zouave
+zounds
+zoysia
+zydeco
+zygoid
+zygoma
+zygose
+zygote
+zymase
\ No newline at end of file
diff --git a/wp-content/plugins/wp2pgpmail/readme.txt b/wp-content/plugins/wp2pgpmail/readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1266ed8910789069c15bdf5c320d6d48447a19fa
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/readme.txt
@@ -0,0 +1,120 @@
+=== wp2pgpmail ===
+Contributors: belaich, wp2pgpmail
+Donate link: http://wp2pgpmail.com
+Tags: PGP, mail, contact form, encrypt, crypt, privacy, encode, secure, encryption, GnuPG, GPG
+Requires at least: 2.9.2
+Tested up to: 3.5.2
+Stable tag: 1.14
+License: GPLv2
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+A simple PGP Mail Form Plugin. Enter your PGP public key, then visitors will be able to send you PGP encrypted messages by mail from a form.
+
+== Description ==
+
+With wp2pgpmail, your visitors can send you a PGP encrypted message very easily. A contact form will offer encryption for sending you confidental messages.
+
+**NEW !!**
+
+We have now released a Pro version of wp2pgpmail, with Additional Fields, Unlimited Forms, Nested Drag n' Drop and Advanced Email Configuration ! Check it at [http://wp2pgpmail.com](http://wp2pgpmail.com). We are still working on the Free version.
+
+How does it work ?
+
+wp2pgpmail includes an OpenPGP Message Encryption System in Javascript, based on [Herbert Hanewinkel's work](http://www.haneWIN.de). Visitors enter a message in a form, encrypt it (with the PGP public key you entered in wp2pgpmail option settings), then an e-mail is sent to you (blog admin e-mail address). The message is encrypted locally on the visitor's computer, so no data is transfered in clear !
+
+[youtube http://www.youtube.com/watch?v=nnY2xirKXkQ]
+
+Is it secure ?
+
+* All code is implememented in readable Javascript.
+* You can verify the source code.
+* No binaries are loaded from a server or used embedded.
+* No hidden transfer of plain text.
+
+Supported languages :
+
+* English
+* French
+* German
+* Spanish
+* Estonian
+
+== Installation ==
+
+1. Upload and extract the content of 'wp2pgpmail.zip' to the '/wp-content/plugins/' directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Paste your PGP public key in the option setting page of wp2pgpmail
+1. Place the tag **[wp2pgpmail]** in the HTML code of the page you want to see the form
+1. Enjoy!
+
+== Frequently Asked Questions ==
+
+= Where do I get a public PGP key and how do I uncrypt messages ? =
+The easiest way to use PGP is to install Mozilla Thunderbird with the [Enigmail extension](http://enigmail.mozdev.org/). For more information about the installation and how to use this software, go to [About PGP](http://wp2pgpmail.com/about-pgp/) and [Enigmail installation instructions](http://wp2pgpmail.com/pgp-with-enigmail/)
+
+= wp2pgpmail is not available in my language. What can I do ? =
+You can translate wp2pgpmail in your language, then submit your translation, so everybody would can use it.
+To do it, we have [a project hosted at Transifex](https://www.transifex.net/projects/p/wp2pgpmail/) where you can add the translation in your language. It's simple, fast and effective. Or:
+
+1. Download and install [Poedit](http://www.poedit.net/)
+1. Open the wp2pgpmail POT file from **wp2pgpmail/i18n/wp2pgpmail.pot**
+1. Go to **File => Save as...** to save your translations in a PO file (*wp2pgpmail-fr_FR.po* for example)
+1. When you are finished translating, go to **File => Save as...** again to generate the MO file
+1. Send us the PO and MO files to translation@wp2pgpmail.com : we will add them to the next release of the plugin
+
+If you want to translate the Pro Edition, please [contact us !](http://wp2pgpmail.com/contact/)
+
+== Screenshots ==
+Screenshots are available on the [wp2pgpmail plugin website](http://wp2pgpmail.com/screenshots/).
+
+== Changelog ==
+= 1.14 =
+* Updated German translation (user contributed)
+
+= 1.13 =
+* Fixing translation support
+
+= 1.12 =
+* Improving WordPress compliance (user contributed)
+
+= 1.11 =
+* Improving SSL support
+
+= 1.10 =
+* Using **wp_mail** function instead of **mail** function (user contributed)
+
+= 1.09 =
+* Added link to wp2pgpmail Support Team
+
+= 1.08 =
+* bug fix : PGP public keys with a comment line inside were not recognized
+
+= 1.07 =
+* Added Estonian translation (user contributed)
+
+= 1.06 =
+* Added Spanish translation (user contributed)
+
+= 1.05 =
+* Added German translation (user contributed)
+
+= 1.04 =
+* Changing the tag to **[wp2pgpmail]** (using Shortcode API now)
+
+= 1.03 =
+* Changing the tag to **{wp2pgpmail}**
+* Adding new fields to the form
+* Adding empty index files to protect all directories
+
+= 1.02 =
+* Fixing bug with some themes
+
+= 1.01 =
+* Initial import
+
+== Upgrade Notice ==
+= 1.04 =
+* The tag must now be **[wp2pgpmail]** to run the plugin
+
+= 1.03 =
+* The tag must now be **{wp2pgpmail}** to run the plugin
diff --git a/wp-content/plugins/wp2pgpmail/wp2pgpmail.php b/wp-content/plugins/wp2pgpmail/wp2pgpmail.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e9dfe2c3133ae9c75c1d13418c136f17e58facd
--- /dev/null
+++ b/wp-content/plugins/wp2pgpmail/wp2pgpmail.php
@@ -0,0 +1,216 @@
+<?php
+/*
+Plugin Name: wp2pgpmail
+Plugin URI: http://wp2pgpmail.com
+Description: A simple PGP Mail Form Plugin for WordPress
+Version: 1.14
+Author: Jeriel B.
+Author URI: http://wp2pgpmail.com
+License:
+    Copyright 2010-2013 Jeriel B.  (e-mail : jeriel@wp2pgpmail.com)
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License, version 2, as 
+    published by the Free Software Foundation.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+    This software would not exist without the work done by:
+    - Herbert Hanewinkel, http://www.haneWIN.de (OpenPGP Encryption)
+    - Drew Phillips, http://www.phpcaptcha.org (Securimage)
+
+    Thanks to you, Folks !
+*/
+
+function wp2pgpmail_init(){
+	load_plugin_textdomain('wp2pgpmail', false, dirname( plugin_basename( __FILE__ ) ) . '/i18n/');
+	require_once 'phpcaptcha/securimage.php';
+	$image = new Securimage();
+}
+
+function wp2pgpmail_insert() {
+	if ( isset($_POST['submitted']) ) {
+		$image = new Securimage();
+		if ( $image->check($_POST['code']) == true && strpos(strip_tags($_POST['text']), "-----BEGIN PGP MESSAGE-----")!==false) {
+			$emailTo = get_option("admin_email");
+			$subject = '[wp2pgpmail]['.get_bloginfo('name').']'.__('Encrypted PGP Message','wp2pgpmail');
+			$body = strip_tags($_POST['text']);
+			$headers = 'From: '.get_option('blogname').' <'.$emailTo.'>' . "\r\n";
+			wp_mail($emailTo, $subject, $body, $headers);
+			return __('Form successfully submitted! The encrypted message has been sent.','wp2pgpmail');
+		} else {
+			return ( __('The image verification code you entered is incorrect. No message has been sent.','wp2pgpmail').'<br /><a href="'.get_permalink().'">'.__('Please try again.','wp2pgpmail').'</a>');
+		}
+	} else {
+		require_once 'classes/formulaire.inc.php';
+		$formulaire = new Formulaire();
+		return $formulaire->Output;
+	}
+}
+
+function wp2pgpmail_settings_page() {
+	wp_enqueue_style( 'wp2pgpmail-style', plugins_url( 'wp2pgpmail-pro' ) . '/css/wp2pgpmail-admin.css' );
+	if ( get_option('wp2pgpmail_pgpkey')==false || get_option('wp2pgpmail_pgpkey_vers')=='' ) {
+		$wp2pgpmail_message_settings = '<br /><font color="#FF0000"><b>'.__('No valid public PGP key has been entered yet.','wp2pgpmail').'</b></font>';
+	} else {
+		$wp2pgpmail_message_settings = '<br /><font color="#006633"><b>'.__('Your PGP public key has been entered correctly.','wp2pgpmail').'</b></font>';
+	}
+
+?>
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/rsa.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/aes-enc.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/sha1.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/base64.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/PGpubkey.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/mouse.js'); ?>" type="text/javascript"></script> 
+<script src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/js/PGencode.js'); ?>" type="text/javascript"></script> 
+<script type="text/javascript"> 
+ 
+var keytyp = -1;
+var keyid  = '';
+var pubkey = '';
+ 
+function getkey() {
+	var pu=new getPublicKey(document.s.pubkey.value);
+	if(pu.vers == -1) {
+		return false;
+	} else {
+		document.form_enregistrement.wp2pgpmail_pgpkey.value=document.s.pubkey.value;
+		
+		document.s.vers.value=pu.vers;
+		document.form_enregistrement.wp2pgpmail_pgpkey_vers.value=pu.vers;
+		
+		document.s.user.value=pu.user;
+		document.form_enregistrement.wp2pgpmail_pgpkey_user.value=pu.user;
+		
+		document.s.keyid.value=pu.keyid;
+		document.form_enregistrement.wp2pgpmail_pgpkey_keyid.value=pu.keyid;
+
+		pubkey = pu.pkey.replace(/\n/g,'');
+		document.s.pkey.value=pubkey;
+		document.form_enregistrement.wp2pgpmail_pgpkey_pkey.value=pubkey;
+		
+		document.s.pktype.value=pu.type;
+		document.form_enregistrement.wp2pgpmail_pgpkey_pktype.value=pu.type;
+	
+		document.form_enregistrement.submit();
+	}
+}
+
+ 
+</script>
+
+<div class="wrap">
+	<h2><img src="<?php echo site_url('/wp-content/plugins/wp2pgpmail/images/big-icon.png'); ?>" alt="" />wp2pgpmail</h2>
+
+	<h3><?php _e( 'Getting Started' , 'wp2pgpmail'); ?></h3>
+	<ol>
+		<li><?php _e( 'Enter your PGP public key in the field below on this page.' , 'wp2pgpmail'); ?></li>
+		<li><?php _e( 'Add the shortcode <b>[wp2pgpmail]</b> to any Post or Page to display the contact form.' , 'wp2pgpmail'); ?></li>
+	</ol>
+	<br />
+	<h3><?php _e( 'Help Promote wp2pgpmail' , 'wp2pgpmail'); ?></h3>
+	<ul id="promote-wp2pgpmail">
+		<li id="star"><b><a href="http://wp2pgpmail.com/" target="_blank"><?php _e( "Get wp2pgpmail Pro version with Additional Fields, Unlimited Forms, Nested Drag n' Drop and Advanced Email Configuration!" , 'wp2pgpmail'); ?></a></b></li>
+		<li id="twitter"><?php _e( 'Follow us on Twitter' , 'wp2pgpmail'); ?>: <a href="https://twitter.com/#!/wp2pgpmail">@wp2pgpmail</a></li>
+		<li id="star"><a href="http://wordpress.org/extend/plugins/wp2pgpmail/"><?php _e( 'Rate wp2pgpmail on WordPress.org' , 'wp2pgpmail'); ?></a></li>
+		<li id="paypal">
+		<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Q79VNLVWMWHXA"><img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" width="74" height="21"></a>
+		</li>
+	</ul>
+	<br />
+	<h3><?php _e('PGP Key Setup', 'wp2pgpmail'); ?></h3>
+	<?php _e('Paste your PGP public key in the first field below. By validating, your key will be recognized and the other fields will be automatically filled.', 'wp2pgpmail'); ?>
+	<br />
+	<?php echo $wp2pgpmail_message_settings; ?>
+	<br />
+	<form name="s" action="javascript:getkey()"> 
+		<table width="600"> 
+			<tr>
+				<td> 
+					<textarea name="pubkey" rows="32" cols="80" style="font-family: Courier, FreeMono, monospace"><?php echo get_option('wp2pgpmail_pgpkey'); ?></textarea>
+				</td>
+			</tr> 
+			<tr>
+				<td> 
+					<table width="100%">
+						<tr>
+							<td><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"><?php _e("Version:",'wp2pgpmail'); ?></font></td>
+							<td align="right"><input size="40" name="vers" value="<?php echo get_option('wp2pgpmail_pgpkey_vers'); ?>" readonly /></td>
+						</tr> 
+						<tr>
+							<td><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"><?php _e("User ID:",'wp2pgpmail'); ?></font></td>
+							<td align="right"><input size="40" name="user" value="<?php echo get_option('wp2pgpmail_pgpkey_user'); ?>" readonly /></td>
+						</tr> 
+						<tr>
+							<td><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"><?php _e("Key ID:",'wp2pgpmail'); ?></font></td>
+							<td align="right"><input size="40" name="keyid" value="<?php echo get_option('wp2pgpmail_pgpkey_keyid'); ?>" readonly /></td>
+						</tr> 
+						<tr>
+							<td><font size="-1" face="Verdana, Arial, Helvetica, sans-serif"><?php _e("Public Key type and values:",'wp2pgpmail'); ?></font></td>
+							<td align="right"><input size="40" name="pktype" value="<?php echo get_option('wp2pgpmail_pgpkey_pktype'); ?>" readonly /></td>
+						</tr>					 
+						<tr>
+							<td colspan="2" align="right"><input size="100" name="pkey" value="<?php echo get_option('wp2pgpmail_pgpkey_pkey'); ?>" readonly /></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</form>
+	<br />
+	<form method="post" action="options.php" name="form_enregistrement">
+		<?php settings_fields( 'wp2pgpmail-settings-group' ); ?>
+		<input type="hidden" name="wp2pgpmail_pgpkey" value="<?php echo get_option('wp2pgpmail_pgpkey'); ?>" />
+		<input type="hidden" name="wp2pgpmail_pgpkey_vers" value="<?php echo get_option('wp2pgpmail_pgpkey_vers'); ?>" />
+		<input type="hidden" name="wp2pgpmail_pgpkey_user" value="<?php echo get_option('wp2pgpmail_pgpkey_user'); ?>" />
+		<input type="hidden" name="wp2pgpmail_pgpkey_keyid" value="<?php echo get_option('wp2pgpmail_pgpkey_keyid'); ?>" />
+		<input type="hidden" name="wp2pgpmail_pgpkey_pktype" value="<?php echo get_option('wp2pgpmail_pgpkey_pktype'); ?>" />
+		<input type="hidden" name="wp2pgpmail_pgpkey_pkey" value="<?php echo get_option('wp2pgpmail_pgpkey_pkey'); ?>" />
+		<p class="submit">
+			<input type="button" onclick="document.s.submit();" class="button-primary" value="<?php _e('Save Changes') ?>" />
+		</p>
+	</form>
+	
+	<h3><?php _e( 'Need help?' , 'wp2pgpmail'); ?></h3>
+	<ol>
+		<li><a href="http://wp2pgpmail.com/about-pgp/"><?php _e( 'Infomation about PGP from wp2pgpmail' , 'wp2pgpmail'); ?></a></li>
+		<li><a href="http://wp2pgpmail.com/faq/"><?php _e( 'wp2pgpmail FAQ' , 'wp2pgpmail'); ?></a></li>
+		<li><a href="http://wp2pgpmail.com/support/"><?php _e( 'wp2pgpmail Support Ticket System' , 'wp2pgpmail'); ?></a></li>
+		<li><a href="http://wordpress.org/tags/wp2pgpmail?forum_id=10"><?php _e( 'wp2pgpmail Forums' , 'wp2pgpmail'); ?></a></li>
+	</ol>
+
+</div>
+<?php } ?>
+<?php
+function wp2pgpmail_register_settings() {
+	
+	//register settings
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey' );
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey_vers' );
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey_user' );
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey_keyid' );
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey_pktype' );
+	register_setting( 'wp2pgpmail-settings-group', 'wp2pgpmail_pgpkey_pkey' );
+}
+
+function wp2pgpmail_menu() {
+	
+	//create new top-level menu
+	add_menu_page('wp2pgpmail Options', 'wp2pgpmail', 'administrator', __FILE__, 'wp2pgpmail_settings_page', plugins_url('/images/icon.png', __FILE__));
+	add_submenu_page(__FILE__,'wp2pgpmail Options', 'Options', 'administrator', __FILE__,'wp2pgpmail_settings_page');
+	
+	//call register settings function
+	add_action( 'admin_init', 'wp2pgpmail_register_settings' );
+}
+
+add_action('init', 'wp2pgpmail_init');
+add_action('admin_menu', 'wp2pgpmail_menu');
+add_shortcode('wp2pgpmail', 'wp2pgpmail_insert');