Google Authenticator – WordPress Two Factor Authentication (2FA) - Version 5.5.76

Version Description

  • Google Authenticator - Two factor Authentication (2FA, OTP) :
  • Bug Fixes and Code Improvements
Download this release

Release Info

Developer prashantbhivsane
Plugin Icon 128x128 Google Authenticator – WordPress Two Factor Authentication (2FA)
Version 5.5.76
Comparing to
See all releases

Code changes from version 5.5.75 to 5.5.76

handler/twofa/class-twofacustomregformshortcode.php CHANGED
@@ -1,69 +1,69 @@
1
- <?php
2
-
3
- include_once('two_fa_short_call.php');
4
-
5
- class TwoFACustomRegFormShortcode
6
-
7
- {
8
- public function __construct()
9
- {
10
- add_action('woocommerce_created_customer',array($this,'wc_post_registration'), 1, 3);
11
- }
12
-
13
- public function mo_enqueue_shortcode()
14
- {
15
- add_action("wp_ajax_mo_shortcode",array( $this, 'mo_shortcode' ));
16
- add_action("wp_ajax_nopriv_mo_shortcode",array($this,'mo_shortcode'));
17
- add_action("wp_ajax_mo_ajax_register",array( $this, 'mo_ajax_register' ));
18
- add_action("wp_ajax_nopriv_mo_ajax_register",array($this,'mo_ajax_register'));
19
- }
20
-
21
- public function mo_shortcode()
22
- {
23
- switch($_POST['mo_action'])
24
- {
25
- case "challenge":
26
- $email = sanitize_email($_POST['email']);
27
- $phone = sanitize_text_field($_POST['phone']);
28
- $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
29
- TwoFACustomRegFormAPI::challenge($phone,$email,$authTypeSend);
30
- break;
31
-
32
- case "validate":
33
- $otp = sanitize_text_field($_POST['otp']);
34
- $txId = sanitize_text_field($_POST['txId']);
35
- TwoFACustomRegFormAPI::validate($txId,$otp);
36
- break;
37
- }
38
- }
39
-
40
- public function mo_ajax_register(){
41
- switch ($_POST['mo_action']) {
42
- case 'send_otp_over_email':
43
- $email = isset($_POST['email'])? sanitize_email($_POST['email']): "";
44
- $phone = isset($_POST['phone'])? sanitize_text_field($_POST['phone']): "";
45
- $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
46
- TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
47
- break;
48
- case 'send_otp_over_sms' :
49
- $email = isset($_POST['email'])? sanitize_email($_POST['email']): "";
50
- $phone = isset($_POST['phone'])? sanitize_text_field($_POST['phone']): "";
51
- $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
52
- TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
53
- break;
54
-
55
- default:
56
- $otp = sanitize_text_field($_POST['otp']);
57
- $txId = sanitize_text_field($_POST['txId']);
58
- TwoFACustomRegFormAPI :: validate($txId,$otp);
59
- break;
60
- }
61
- }
62
-
63
- function wc_post_registration( $user_id, $new_customer_data, $password_generated) {
64
- if ( isset( $_POST['phone'] ))
65
- update_user_meta($user_id, 'billing_phone', sanitize_text_field($_POST['phone']));
66
- }
67
- }
68
-
69
-
1
+ <?php
2
+
3
+ include_once('two_fa_short_call.php');
4
+
5
+ class TwoFACustomRegFormShortcode
6
+
7
+ {
8
+ public function __construct()
9
+ {
10
+ add_action('woocommerce_created_customer',array($this,'wc_post_registration'), 1, 3);
11
+ }
12
+
13
+ public function mo_enqueue_shortcode()
14
+ {
15
+ add_action("wp_ajax_mo_shortcode",array( $this, 'mo_shortcode' ));
16
+ add_action("wp_ajax_nopriv_mo_shortcode",array($this,'mo_shortcode'));
17
+ add_action("wp_ajax_mo_ajax_register",array( $this, 'mo_ajax_register' ));
18
+ add_action("wp_ajax_nopriv_mo_ajax_register",array($this,'mo_ajax_register'));
19
+ }
20
+
21
+ public function mo_shortcode()
22
+ {
23
+ switch($_POST['mo_action'])
24
+ {
25
+ case "challenge":
26
+ $email = sanitize_email($_POST['email']);
27
+ $phone = sanitize_text_field($_POST['phone']);
28
+ $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
29
+ TwoFACustomRegFormAPI::challenge($phone,$email,$authTypeSend);
30
+ break;
31
+
32
+ case "validate":
33
+ $otp = sanitize_text_field($_POST['otp']);
34
+ $txId = sanitize_text_field($_POST['txId']);
35
+ TwoFACustomRegFormAPI::validate($txId,$otp);
36
+ break;
37
+ }
38
+ }
39
+
40
+ public function mo_ajax_register(){
41
+ switch ($_POST['mo_action']) {
42
+ case 'send_otp_over_email':
43
+ $email = isset($_POST['email'])? sanitize_email($_POST['email']): "";
44
+ $phone = isset($_POST['phone'])? sanitize_text_field($_POST['phone']): "";
45
+ $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
46
+ TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
47
+ break;
48
+ case 'send_otp_over_sms' :
49
+ $email = isset($_POST['email'])? sanitize_email($_POST['email']): "";
50
+ $phone = isset($_POST['phone'])? sanitize_text_field($_POST['phone']): "";
51
+ $authTypeSend = sanitize_text_field($_POST['authTypeSend']);
52
+ TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
53
+ break;
54
+
55
+ default:
56
+ $otp = sanitize_text_field($_POST['otp']);
57
+ $txId = sanitize_text_field($_POST['txId']);
58
+ TwoFACustomRegFormAPI :: validate($txId,$otp);
59
+ break;
60
+ }
61
+ }
62
+
63
+ function wc_post_registration( $user_id, $new_customer_data, $password_generated) {
64
+ if ( isset( $_POST['phone'] ))
65
+ update_user_meta($user_id, 'billing_phone', sanitize_text_field($_POST['phone']));
66
+ }
67
+ }
68
+
69
+
includes/js/rba/js/jquery-1.9.1.js DELETED
@@ -1,182 +0,0 @@
1
- (function(r,m){function ya(a){var b=a.length,d=c.type(a);return c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||"function"!==d&&(0===b||"number"===typeof b&&0<b&&b-1 in a)}function Rb(a){var b=Ua[a]={};c.each(a.match(O)||[],function(a,c){b[c]=!0});return b}function Va(a,b,d,e){if(c.acceptData(a)){var f=c.expando,g="string"===typeof b,h=a.nodeType,k=h?c.cache:a,l=h?a[f]:a[f]&&f;if(l&&k[l]&&(e||k[l].data)||!g||d!==m){l||(h?a[f]=l=I.pop()||c.guid++:l=f);k[l]||(k[l]={},h||(k[l].toJSON=c.noop));if("object"===
2
- typeof b||"function"===typeof b)e?k[l]=c.extend(k[l],b):k[l].data=c.extend(k[l].data,b);a=k[l];e||(a.data||(a.data={}),a=a.data);d!==m&&(a[c.camelCase(b)]=d);g?(d=a[b],null==d&&(d=a[c.camelCase(b)])):d=a;return d}}}function Wa(a,b,d){if(c.acceptData(a)){var e,f,g,h=a.nodeType,k=h?c.cache:a,l=h?a[c.expando]:c.expando;if(k[l]){if(b&&(g=d?k[l]:k[l].data)){c.isArray(b)?b=b.concat(c.map(b,c.camelCase)):b in g?b=[b]:(b=c.camelCase(b),b=b in g?[b]:b.split(" "));e=0;for(f=b.length;e<f;e++)delete g[b[e]];
3
- if(!(d?za:c.isEmptyObject)(g))return}if(!d&&(delete k[l].data,!za(k[l])))return;h?c.cleanData([a],!0):c.support.deleteExpando||k!=k.window?delete k[l]:k[l]=null}}}function Xa(a,b,d){if(d===m&&1===a.nodeType)if(d="data-"+b.replace(Sb,"-$1").toLowerCase(),d=a.getAttribute(d),"string"===typeof d){try{d="true"===d?!0:"false"===d?!1:"null"===d?null:+d+""===d?+d:Tb.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=m;return d}function za(a){for(var b in a)if(("data"!==b||!c.isEmptyObject(a[b]))&&"toJSON"!==
4
- b)return!1;return!0}function ba(){return!0}function R(){return!1}function Ya(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function Za(a,b,d){b=b||0;if(c.isFunction(b))return c.grep(a,function(a,c){return!!b.call(a,c,a)===d});if(b.nodeType)return c.grep(a,function(a){return a===b===d});if("string"===typeof b){var e=c.grep(a,function(a){return 1===a.nodeType});if(Ub.test(b))return c.filter(b,e,!d);b=c.filter(b,e)}return c.grep(a,function(a){return 0<=c.inArray(a,b)===d})}function $a(a){var b=ab.split("|");
5
- a=a.createDocumentFragment();if(a.createElement)for(;b.length;)a.createElement(b.pop());return a}function Vb(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bb(a){var b=a.getAttributeNode("type");a.type=(b&&b.specified)+"/"+a.type;return a}function cb(a){var b=Wb.exec(a.type);b?a.type=b[1]:a.removeAttribute("type");return a}function Aa(a,b){for(var d,e=0;null!=(d=a[e]);e++)c._data(d,"globalEval",!b||c._data(b[e],"globalEval"))}function db(a,b){if(1===
6
- b.nodeType&&c.hasData(a)){var d,e,f;e=c._data(a);var g=c._data(b,e),h=e.events;if(h)for(d in delete g.handle,g.events={},h)for(e=0,f=h[d].length;e<f;e++)c.event.add(b,d,h[d][e]);g.data&&(g.data=c.extend({},g.data))}}function B(a,b){var d,e,f=0,g=typeof a.getElementsByTagName!==z?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==z?a.querySelectorAll(b||"*"):m;if(!g)for(g=[],d=a.childNodes||a;null!=(e=d[f]);f++)!b||c.nodeName(e,b)?g.push(e):c.merge(g,B(e,b));return b===m||b&&c.nodeName(a,b)?
7
- c.merge([a],g):g}function Xb(a){Ba.test(a.type)&&(a.defaultChecked=a.checked)}function eb(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),e=b,f=fb.length;f--;)if(b=fb[f]+c,b in a)return b;return e}function fa(a,b){a=b||a;return"none"===c.css(a,"display")||!c.contains(a.ownerDocument,a)}function gb(a,b){for(var d,e,f,g=[],h=0,k=a.length;h<k;h++)e=a[h],e.style&&(g[h]=c._data(e,"olddisplay"),d=e.style.display,b?(g[h]||"none"!==d||(e.style.display=""),""===e.style.display&&fa(e)&&
8
- (g[h]=c._data(e,"olddisplay",hb(e.nodeName)))):g[h]||(f=fa(e),(d&&"none"!==d||!f)&&c._data(e,"olddisplay",f?d:c.css(e,"display"))));for(h=0;h<k;h++)e=a[h],!e.style||b&&"none"!==e.style.display&&""!==e.style.display||(e.style.display=b?g[h]||"":"none");return a}function ib(a,b,c){return(a=Yb.exec(b))?Math.max(0,a[1]-(c||0))+(a[2]||"px"):b}function jb(a,b,d,e,f){b=d===(e?"border":"content")?4:"width"===b?1:0;for(var g=0;4>b;b+=2)"margin"===d&&(g+=c.css(a,d+S[b],!0,f)),e?("content"===d&&(g-=c.css(a,
9
- "padding"+S[b],!0,f)),"margin"!==d&&(g-=c.css(a,"border"+S[b]+"Width",!0,f))):(g+=c.css(a,"padding"+S[b],!0,f),"padding"!==d&&(g+=c.css(a,"border"+S[b]+"Width",!0,f)));return g}function kb(a,b,d){var e=!0,f="width"===b?a.offsetWidth:a.offsetHeight,g=T(a),h=c.support.boxSizing&&"border-box"===c.css(a,"boxSizing",!1,g);if(0>=f||null==f){f=U(a,b,g);if(0>f||null==f)f=a.style[b];if(ka.test(f))return f;e=h&&(c.support.boxSizingReliable||f===a.style[b]);f=parseFloat(f)||0}return f+jb(a,b,d||(h?"border":
10
- "content"),e,g)+"px"}function hb(a){var b=p,d=lb[a];d||(d=mb(a,b),"none"!==d&&d||(ga=(ga||c("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(b.documentElement),b=(ga[0].contentWindow||ga[0].contentDocument).document,b.write("<!doctype html><html><body>"),b.close(),d=mb(a,b),ga.detach()),lb[a]=d);return d}function mb(a,b){var d=c(b.createElement(a)).appendTo(b.body),e=c.css(d[0],"display");d.remove();return e}function Ca(a,b,d,e){var f;if(c.isArray(b))c.each(b,
11
- function(b,c){d||Zb.test(a)?e(a,c):Ca(a+"["+("object"===typeof c?b:"")+"]",c,d,e)});else if(d||"object"!==c.type(b))e(a,b);else for(f in b)Ca(a+"["+f+"]",b[f],d,e)}function nb(a){return function(b,d){"string"!==typeof b&&(d=b,b="*");var e,f=0,g=b.toLowerCase().match(O)||[];if(c.isFunction(d))for(;e=g[f++];)"+"===e[0]?(e=e.slice(1)||"*",(a[e]=a[e]||[]).unshift(d)):(a[e]=a[e]||[]).push(d)}}function ob(a,b,d,e){function f(k){var l;g[k]=!0;c.each(a[k]||[],function(a,c){var k=c(b,d,e);if("string"===typeof k&&
12
- !h&&!g[k])return b.dataTypes.unshift(k),f(k),!1;if(h)return!(l=k)});return l}var g={},h=a===Da;return f(b.dataTypes[0])||!g["*"]&&f("*")}function Ea(a,b){var d,e,f=c.ajaxSettings.flatOptions||{};for(e in b)b[e]!==m&&((f[e]?a:d||(d={}))[e]=b[e]);d&&c.extend(!0,a,d);return a}function pb(){try{return new r.XMLHttpRequest}catch(a){}}function qb(){setTimeout(function(){Y=m});return Y=c.now()}function $b(a,b){c.each(b,function(b,c){for(var f=(ha[b]||[]).concat(ha["*"]),g=0,h=f.length;g<h&&!f[g].call(a,
13
- b,c);g++);})}function rb(a,b,d){var e,f=0,g=la.length,h=c.Deferred().always(function(){delete k.elem}),k=function(){if(e)return!1;for(var b=Y||qb(),b=Math.max(0,l.startTime+l.duration-b),c=1-(b/l.duration||0),d=0,f=l.tweens.length;d<f;d++)l.tweens[d].run(c);h.notifyWith(a,[l,c,b]);if(1>c&&f)return b;h.resolveWith(a,[l]);return!1},l=h.promise({elem:a,props:c.extend({},b),opts:c.extend(!0,{specialEasing:{}},d),originalProperties:b,originalOptions:d,startTime:Y||qb(),duration:d.duration,tweens:[],createTween:function(b,
14
- d){var e=c.Tween(a,l.opts,b,d,l.opts.specialEasing[b]||l.opts.easing);l.tweens.push(e);return e},stop:function(b){var c=0,d=b?l.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)l.tweens[c].run(1);b?h.resolveWith(a,[l,b]):h.rejectWith(a,[l,b]);return this}});d=l.props;for(ac(d,l.opts.specialEasing);f<g;f++)if(b=la[f].call(l,a,d,l.opts))return b;$b(l,d);c.isFunction(l.opts.start)&&l.opts.start.call(a,l);c.fx.timer(c.extend(k,{elem:a,anim:l,queue:l.opts.queue}));return l.progress(l.opts.progress).done(l.opts.done,
15
- l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function ac(a,b){var d,e,f,g,h;for(f in a)if(e=c.camelCase(f),g=b[e],d=a[f],c.isArray(d)&&(g=d[1],d=a[f]=d[0]),f!==e&&(a[e]=d,delete a[f]),(h=c.cssHooks[e])&&"expand"in h)for(f in d=h.expand(d),delete a[e],d)f in a||(a[f]=d[f],b[f]=g);else b[e]=g}function A(a,b,c,e,f){return new A.prototype.init(a,b,c,e,f)}function ma(a,b){var c,e={height:a},f=0;for(b=b?1:0;4>f;f+=2-b)c=S[f],e["margin"+c]=e["padding"+c]=a;b&&(e.opacity=e.width=a);return e}function sb(a){return c.isWindow(a)?
16
- a:9===a.nodeType?a.defaultView||a.parentWindow:!1}var na,tb,z=typeof m,p=r.document,bc=r.location,cc=r.jQuery,dc=r.$,oa={},I=[],ub=I.concat,Fa=I.push,C=I.slice,vb=I.indexOf,ec=oa.toString,ia=oa.hasOwnProperty,Ga="1.9.1".trim,c=function(a,b){return new c.fn.init(a,b,tb)},pa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,O=/\S+/g,fc=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,gc=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,wb=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,hc=/^[\],:{}\s]*$/,ic=/(?:^|:|,)(?:\s*\[)+/g,jc=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
17
- kc=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,lc=/^-ms-/,mc=/-([\da-z])/gi,nc=function(a,b){return b.toUpperCase()},L=function(a){if(p.addEventListener||"load"===a.type||"complete"===p.readyState)xb(),c.ready()},xb=function(){p.addEventListener?(p.removeEventListener("DOMContentLoaded",L,!1),r.removeEventListener("load",L,!1)):(p.detachEvent("onreadystatechange",L),r.detachEvent("onload",L))};c.fn=c.prototype={jquery:"1.9.1",constructor:c,init:function(a,b,d){var e;if(!a)return this;
18
- if("string"===typeof a){e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&3<=a.length?[null,a,null]:gc.exec(a);if(!e||!e[1]&&b)return!b||b.jquery?(b||d).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof c?b[0]:b,c.merge(this,c.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:p,!0)),wb.test(e[1])&&c.isPlainObject(b))for(e in b)if(c.isFunction(this[e]))this[e](b[e]);else this.attr(e,b[e])}else{if((b=p.getElementById(e[2]))&&b.parentNode){if(b.id!==e[2])return d.find(a);this.length=1;this[0]=
19
- b}this.context=p;this.selector=a}return this}if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(c.isFunction(a))return d.ready(a);a.selector!==m&&(this.selector=a.selector,this.context=a.context);return c.makeArray(a,this)},selector:"",length:0,size:function(){return this.length},toArray:function(){return C.call(this)},get:function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},pushStack:function(a){a=c.merge(this.constructor(),a);a.prevObject=this;a.context=this.context;
20
- return a},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.ready.promise().done(a);return this},slice:function(){return this.pushStack(C.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length;a=+a+(0>a?b:0);return this.pushStack(0<=a&&a<b?[this[a]]:[])},map:function(a){return this.pushStack(c.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:Fa,
21
- sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a,b,d,e,f,g=arguments[0]||{},h=1,k=arguments.length,l=!1;"boolean"===typeof g&&(l=g,g=arguments[1]||{},h=2);"object"===typeof g||c.isFunction(g)||(g={});k===h&&(g=this,--h);for(;h<k;h++)if(null!=(f=arguments[h]))for(e in f)a=g[e],d=f[e],g!==d&&(l&&d&&(c.isPlainObject(d)||(b=c.isArray(d)))?(b?(b=!1,a=a&&c.isArray(a)?a:[]):a=a&&c.isPlainObject(a)?a:{},g[e]=c.extend(l,a,d)):d!==m&&(g[e]=d));return g};c.extend({noConflict:function(a){r.$===
22
- c&&(r.$=dc);a&&r.jQuery===c&&(r.jQuery=cc);return c},isReady:!1,readyWait:1,holdReady:function(a){a?c.readyWait++:c.ready(!0)},ready:function(a){if(!0===a?!--c.readyWait:!c.isReady){if(!p.body)return setTimeout(c.ready);c.isReady=!0;!0!==a&&0<--c.readyWait||(na.resolveWith(p,[c]),c.fn.trigger&&c(p).trigger("ready").off("ready"))}},isFunction:function(a){return"function"===c.type(a)},isArray:Array.isArray||function(a){return"array"===c.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&
23
- isFinite(a)},type:function(a){return null==a?String(a):"object"===typeof a||"function"===typeof a?oa[ec.call(a)]||"object":typeof a},isPlainObject:function(a){if(!a||"object"!==c.type(a)||a.nodeType||c.isWindow(a))return!1;try{if(a.constructor&&!ia.call(a,"constructor")&&!ia.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(d){return!1}for(var b in a);return b===m||ia.call(a,b)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw Error(a);},parseHTML:function(a,
24
- b,d){if(!a||"string"!==typeof a)return null;"boolean"===typeof b&&(d=b,b=!1);b=b||p;var e=wb.exec(a);d=!d&&[];if(e)return[b.createElement(e[1])];e=c.buildFragment([a],b,d);d&&c(d).remove();return c.merge([],e.childNodes)},parseJSON:function(a){if(r.JSON&&r.JSON.parse)return r.JSON.parse(a);if(null===a)return a;if("string"===typeof a&&(a=c.trim(a))&&hc.test(a.replace(jc,"@").replace(kc,"]").replace(ic,"")))return(new Function("return "+a))();c.error("Invalid JSON: "+a)},parseXML:function(a){var b,
25
- d;if(!a||"string"!==typeof a)return null;try{r.DOMParser?(d=new DOMParser,b=d.parseFromString(a,"text/xml")):(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a))}catch(e){b=m}b&&b.documentElement&&!b.getElementsByTagName("parsererror").length||c.error("Invalid XML: "+a);return b},noop:function(){},globalEval:function(a){a&&c.trim(a)&&(r.execScript||function(a){r.eval.call(r,a)})(a)},camelCase:function(a){return a.replace(lc,"ms-").replace(mc,nc)},nodeName:function(a,b){return a.nodeName&&
26
- a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var e,f=0,g=a.length;e=ya(a);if(c)if(e)for(;f<g&&(e=b.apply(a[f],c),!1!==e);f++);else for(f in a){if(e=b.apply(a[f],c),!1===e)break}else if(e)for(;f<g&&(e=b.call(a[f],f,a[f]),!1!==e);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),!1===e)break;return a},trim:Ga&&!Ga.call("\ufeff\u00a0")?function(a){return null==a?"":Ga.call(a)}:function(a){return null==a?"":(a+"").replace(fc,"")},makeArray:function(a,b){var d=b||[];null!=a&&(ya(Object(a))?
27
- c.merge(d,"string"===typeof a?[a]:a):Fa.call(d,a));return d},inArray:function(a,b,c){var e;if(b){if(vb)return vb.call(b,a,c);e=b.length;for(c=c?0>c?Math.max(0,e+c):c:0;c<e;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=b.length,e=a.length,f=0;if("number"===typeof c)for(;f<c;f++)a[e++]=b[f];else for(;b[f]!==m;)a[e++]=b[f++];a.length=e;return a},grep:function(a,b,c){var e,f=[],g=0,h=a.length;for(c=!!c;g<h;g++)e=!!b(a[g],g),c!==e&&f.push(a[g]);return f},map:function(a,b,c){var e,
28
- f=0,g=a.length,h=[];if(ya(a))for(;f<g;f++)e=b(a[f],f,c),null!=e&&(h[h.length]=e);else for(f in a)e=b(a[f],f,c),null!=e&&(h[h.length]=e);return ub.apply([],h)},guid:1,proxy:function(a,b){var d,e;"string"===typeof b&&(e=a[b],b=a,a=e);if(!c.isFunction(a))return m;d=C.call(arguments,2);e=function(){return a.apply(b||this,d.concat(C.call(arguments)))};e.guid=a.guid=a.guid||c.guid++;return e},access:function(a,b,d,e,f,g,h){var k=0,l=a.length,u=null==d;if("object"===c.type(d))for(k in f=!0,d)c.access(a,
29
- b,k,d[k],!0,g,h);else if(e!==m&&(f=!0,c.isFunction(e)||(h=!0),u&&(h?(b.call(a,e),b=null):(u=b,b=function(a,b,d){return u.call(c(a),d)})),b))for(;k<l;k++)b(a[k],d,h?e:e.call(a[k],k,b(a[k],d)));return f?a:u?b.call(a):l?b(a[0],d):g},now:function(){return(new Date).getTime()}});c.ready.promise=function(a){if(!na)if(na=c.Deferred(),"complete"===p.readyState)setTimeout(c.ready);else if(p.addEventListener)p.addEventListener("DOMContentLoaded",L,!1),r.addEventListener("load",L,!1);else{p.attachEvent("onreadystatechange",
30
- L);r.attachEvent("onload",L);var b=!1;try{b=null==r.frameElement&&p.documentElement}catch(d){}b&&b.doScroll&&function e(){if(!c.isReady){try{b.doScroll("left")}catch(a){return setTimeout(e,50)}xb();c.ready()}}()}return na.promise(a)};c.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){oa["[object "+b+"]"]=b.toLowerCase()});tb=c(p);var Ua={};c.Callbacks=function(a){a="string"===typeof a?Ua[a]||Rb(a):c.extend({},a);var b,d,e,f,g,h,k=[],l=!a.once&&[],u=function(c){d=
31
- a.memory&&c;e=!0;g=h||0;h=0;f=k.length;for(b=!0;k&&g<f;g++)if(!1===k[g].apply(c[0],c[1])&&a.stopOnFalse){d=!1;break}b=!1;k&&(l?l.length&&u(l.shift()):d?k=[]:t.disable())},t={add:function(){if(k){var e=k.length;(function oc(b){c.each(b,function(b,d){var e=c.type(d);"function"===e?a.unique&&t.has(d)||k.push(d):d&&d.length&&"string"!==e&&oc(d)})})(arguments);b?f=k.length:d&&(h=e,u(d))}return this},remove:function(){k&&c.each(arguments,function(a,d){for(var e;-1<(e=c.inArray(d,k,e));)k.splice(e,1),b&&
32
- (e<=f&&f--,e<=g&&g--)});return this},has:function(a){return a?-1<c.inArray(a,k):!(!k||!k.length)},empty:function(){k=[];return this},disable:function(){k=l=d=m;return this},disabled:function(){return!k},lock:function(){l=m;d||t.disable();return this},locked:function(){return!l},fireWith:function(a,c){c=c||[];c=[a,c.slice?c.slice():c];!k||e&&!l||(b?l.push(c):u(c));return this},fire:function(){t.fireWith(this,arguments);return this},fired:function(){return!!e}};return t};c.extend({Deferred:function(a){var b=
33
- [["resolve","done",c.Callbacks("once memory"),"resolved"],["reject","fail",c.Callbacks("once memory"),"rejected"],["notify","progress",c.Callbacks("memory")]],d="pending",e={state:function(){return d},always:function(){f.done(arguments).fail(arguments);return this},then:function(){var a=arguments;return c.Deferred(function(d){c.each(b,function(b,l){var u=l[0],m=c.isFunction(a[b])&&a[b];f[l[1]](function(){var a=m&&m.apply(this,arguments);if(a&&c.isFunction(a.promise))a.promise().done(d.resolve).fail(d.reject).progress(d.notify);
34
- else d[u+"With"](this===e?d.promise():this,m?[a]:arguments)})});a=null}).promise()},promise:function(a){return null!=a?c.extend(a,e):e}},f={};e.pipe=e.then;c.each(b,function(a,c){var k=c[2],l=c[3];e[c[1]]=k.add;l&&k.add(function(){d=l},b[a^1][2].disable,b[2][2].lock);f[c[0]]=function(){f[c[0]+"With"](this===f?e:this,arguments);return this};f[c[0]+"With"]=k.fireWith});e.promise(f);a&&a.call(f,f);return f},when:function(a){var b=0,d=C.call(arguments),e=d.length,f=1!==e||a&&c.isFunction(a.promise)?e:
35
- 0,g=1===f?a:c.Deferred(),h=function(a,b,c){return function(d){b[a]=this;c[a]=1<arguments.length?C.call(arguments):d;c===k?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},k,l,u;if(1<e)for(k=Array(e),l=Array(e),u=Array(e);b<e;b++)d[b]&&c.isFunction(d[b].promise)?d[b].promise().done(h(b,u,d)).fail(g.reject).progress(h(b,l,k)):--f;f||g.resolveWith(u,d);return g.promise()}});c.support=function(){var a,b,d,e,f,g,h,k=p.createElement("div");k.setAttribute("className","t");k.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
36
- b=k.getElementsByTagName("*");d=k.getElementsByTagName("a")[0];if(!b||!d||!b.length)return{};e=p.createElement("select");f=e.appendChild(p.createElement("option"));b=k.getElementsByTagName("input")[0];d.style.cssText="top:1px;float:left;opacity:.5";a={getSetAttribute:"t"!==k.className,leadingWhitespace:3===k.firstChild.nodeType,tbody:!k.getElementsByTagName("tbody").length,htmlSerialize:!!k.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:"/a"===d.getAttribute("href"),
37
- opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:!!b.value,optSelected:f.selected,enctype:!!p.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==p.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===p.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1};b.checked=!0;a.noCloneChecked=b.cloneNode(!0).checked;e.disabled=!0;a.optDisabled=!f.disabled;try{delete k.test}catch(l){a.deleteExpando=
38
- !1}b=p.createElement("input");b.setAttribute("value","");a.input=""===b.getAttribute("value");b.value="t";b.setAttribute("type","radio");a.radioValue="t"===b.value;b.setAttribute("checked","t");b.setAttribute("name","t");d=p.createDocumentFragment();d.appendChild(b);a.appendChecked=b.checked;a.checkClone=d.cloneNode(!0).cloneNode(!0).lastChild.checked;k.attachEvent&&(k.attachEvent("onclick",function(){a.noCloneEvent=!1}),k.cloneNode(!0).click());for(h in{submit:!0,change:!0,focusin:!0})k.setAttribute(d=
39
- "on"+h,"t"),a[h+"Bubbles"]=d in r||!1===k.attributes[d].expando;k.style.backgroundClip="content-box";k.cloneNode(!0).style.backgroundClip="";a.clearCloneStyle="content-box"===k.style.backgroundClip;c(function(){var b,c,d=p.getElementsByTagName("body")[0];d&&(b=p.createElement("div"),b.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",d.appendChild(b).appendChild(k),k.innerHTML="<table><tr><td></td><td>t</td></tr></table>",c=k.getElementsByTagName("td"),
40
- c[0].style.cssText="padding:0;margin:0;border:0;display:none",g=0===c[0].offsetHeight,c[0].style.display="",c[1].style.display="none",a.reliableHiddenOffsets=g&&0===c[0].offsetHeight,k.innerHTML="",k.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",a.boxSizing=4===k.offsetWidth,a.doesNotIncludeMarginInBodyOffset=1!==d.offsetTop,r.getComputedStyle&&(a.pixelPosition="1%"!==
41
- (r.getComputedStyle(k,null)||{}).top,a.boxSizingReliable="4px"===(r.getComputedStyle(k,null)||{width:"4px"}).width,c=k.appendChild(p.createElement("div")),c.style.cssText=k.style.cssText="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",c.style.marginRight=c.style.width="0",k.style.width="1px",a.reliableMarginRight=!parseFloat((r.getComputedStyle(c,null)||{}).marginRight)),typeof k.style.zoom!==z&&(k.innerHTML="",k.style.cssText=
42
- "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;width:1px;padding:1px;display:inline;zoom:1",a.inlineBlockNeedsLayout=3===k.offsetWidth,k.style.display="block",k.innerHTML="<div></div>",k.firstChild.style.width="5px",a.shrinkWrapBlocks=3!==k.offsetWidth,a.inlineBlockNeedsLayout&&(d.style.zoom=1)),d.removeChild(b),k=null)});b=e=d=f=d=b=null;return a}();var Tb=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Sb=/([A-Z])/g;c.extend({cache:{},
43
- expando:"jQuery"+("1.9.1"+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?c.cache[a[c.expando]]:a[c.expando];return!!a&&!za(a)},data:function(a,b,c){return Va(a,b,c)},removeData:function(a,b){return Wa(a,b)},_data:function(a,b,c){return Va(a,b,c,!0)},_removeData:function(a,b){return Wa(a,b,!0)},acceptData:function(a){if(a.nodeType&&1!==a.nodeType&&9!==a.nodeType)return!1;var b=a.nodeName&&c.noData[a.nodeName.toLowerCase()];
44
- return!b||!0!==b&&a.getAttribute("classid")===b}});c.fn.extend({data:function(a,b){var d,e,f=this[0],g=0,h=null;if(a===m){if(this.length&&(h=c.data(f),1===f.nodeType&&!c._data(f,"parsedAttrs"))){for(d=f.attributes;g<d.length;g++)e=d[g].name,e.indexOf("data-")||(e=c.camelCase(e.slice(5)),Xa(f,e,h[e]));c._data(f,"parsedAttrs",!0)}return h}return"object"===typeof a?this.each(function(){c.data(this,a)}):c.access(this,function(b){if(b===m)return f?Xa(f,a,c.data(f,a)):null;this.each(function(){c.data(this,
45
- a,b)})},null,b,1<arguments.length,null,!0)},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){var e;if(a)return b=(b||"fx")+"queue",e=c._data(a,b),d&&(!e||c.isArray(d)?e=c._data(a,b,c.makeArray(d)):e.push(d)),e||[]},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.length,f=d.shift(),g=c._queueHooks(a,b),h=function(){c.dequeue(a,b)};"inprogress"===f&&(f=d.shift(),e--);if(g.cur=f)"fx"===b&&d.unshift("inprogress"),delete g.stop,f.call(a,
46
- h,g);!e&&g&&g.empty.fire()},_queueHooks:function(a,b){var d=b+"queueHooks";return c._data(a,d)||c._data(a,d,{empty:c.Callbacks("once memory").add(function(){c._removeData(a,b+"queue");c._removeData(a,d)})})}});c.fn.extend({queue:function(a,b){var d=2;"string"!==typeof a&&(b=a,a="fx",d--);return arguments.length<d?c.queue(this[0],a):b===m?this:this.each(function(){var d=c.queue(this,a,b);c._queueHooks(this,a);"fx"===a&&"inprogress"!==d[0]&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
47
- a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;return this.queue(b||"fx",function(b,c){var f=setTimeout(b,a);c.stop=function(){clearTimeout(f)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var d,e=1,f=c.Deferred(),g=this,h=this.length,k=function(){--e||f.resolveWith(g,[g])};"string"!==typeof a&&(b=a,a=m);for(a=a||"fx";h--;)(d=c._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(k));k();return f.promise(b)}});var V,yb,Ha=/[\t\r\n]/g,pc=/\r/g,qc=/^(?:input|select|textarea|button|object)$/i,
48
- rc=/^(?:a|area)$/i,zb=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Ia=/^(?:checked|selected)$/i,Z=c.support.getSetAttribute,Ja=c.support.input;c.fn.extend({attr:function(a,b){return c.access(this,c.attr,a,b,1<arguments.length)},removeAttr:function(a){return this.each(function(){c.removeAttr(this,a)})},prop:function(a,b){return c.access(this,c.prop,a,b,1<arguments.length)},removeProp:function(a){a=c.propFix[a]||a;return this.each(function(){try{this[a]=
49
- m,delete this[a]}catch(b){}})},addClass:function(a){var b,d,e,f,g,h=0,k=this.length;b="string"===typeof a&&a;if(c.isFunction(a))return this.each(function(b){c(this).addClass(a.call(this,b,this.className))});if(b)for(b=(a||"").match(O)||[];h<k;h++)if(d=this[h],e=1===d.nodeType&&(d.className?(" "+d.className+" ").replace(Ha," "):" ")){for(g=0;f=b[g++];)0>e.indexOf(" "+f+" ")&&(e+=f+" ");d.className=c.trim(e)}return this},removeClass:function(a){var b,d,e,f,g,h=0,k=this.length;b=0===arguments.length||
50
- "string"===typeof a&&a;if(c.isFunction(a))return this.each(function(b){c(this).removeClass(a.call(this,b,this.className))});if(b)for(b=(a||"").match(O)||[];h<k;h++)if(d=this[h],e=1===d.nodeType&&(d.className?(" "+d.className+" ").replace(Ha," "):"")){for(g=0;f=b[g++];)for(;0<=e.indexOf(" "+f+" ");)e=e.replace(" "+f+" "," ");d.className=a?c.trim(e):""}return this},toggleClass:function(a,b){var d=typeof a,e="boolean"===typeof b;return c.isFunction(a)?this.each(function(d){c(this).toggleClass(a.call(this,
51
- d,this.className,b),b)}):this.each(function(){if("string"===d)for(var f,g=0,h=c(this),k=b,l=a.match(O)||[];f=l[g++];)k=e?k:!h.hasClass(f),h[k?"addClass":"removeClass"](f);else if(d===z||"boolean"===d)this.className&&c._data(this,"__className__",this.className),this.className=this.className||!1===a?"":c._data(this,"__className__")||""})},hasClass:function(a){a=" "+a+" ";for(var b=0,c=this.length;b<c;b++)if(1===this[b].nodeType&&0<=(" "+this[b].className+" ").replace(Ha," ").indexOf(a))return!0;return!1},
52
- val:function(a){var b,d,e,f=this[0];if(arguments.length)return e=c.isFunction(a),this.each(function(b){var f=c(this);1===this.nodeType&&(b=e?a.call(this,b,f.val()):a,null==b?b="":"number"===typeof b?b+="":c.isArray(b)&&(b=c.map(b,function(a){return null==a?"":a+""})),d=c.valHooks[this.type]||c.valHooks[this.nodeName.toLowerCase()],d&&"set"in d&&d.set(this,b,"value")!==m||(this.value=b))});if(f){if((d=c.valHooks[f.type]||c.valHooks[f.nodeName.toLowerCase()])&&"get"in d&&(b=d.get(f,"value"))!==m)return b;
53
- b=f.value;return"string"===typeof b?b.replace(pc,""):null==b?"":b}}});c.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){for(var b,d=a.options,e=a.selectedIndex,f=(a="select-one"===a.type||0>e)?null:[],g=a?e+1:d.length,h=0>e?g:a?e:0;h<g;h++)if(b=d[h],!(!b.selected&&h!==e||(c.support.optDisabled?b.disabled:null!==b.getAttribute("disabled"))||b.parentNode.disabled&&c.nodeName(b.parentNode,"optgroup"))){b=c(b).val();if(a)return b;
54
- f.push(b)}return f},set:function(a,b){var d=c.makeArray(b);c(a).find("option").each(function(){this.selected=0<=c.inArray(c(this).val(),d)});d.length||(a.selectedIndex=-1);return d}}},attr:function(a,b,d){var e,f,g;f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f){if(typeof a.getAttribute===z)return c.prop(a,b,d);if(f=1!==f||!c.isXMLDoc(a))b=b.toLowerCase(),e=c.attrHooks[b]||(zb.test(b)?yb:V);if(d!==m)if(null===d)c.removeAttr(a,b);else{if(e&&f&&"set"in e&&(g=e.set(a,d,b))!==m)return g;a.setAttribute(b,d+"");
55
- return d}else{if(e&&f&&"get"in e&&null!==(g=e.get(a,b)))return g;typeof a.getAttribute!==z&&(g=a.getAttribute(b));return null==g?m:g}}},removeAttr:function(a,b){var d,e,f=0,g=b&&b.match(O);if(g&&1===a.nodeType)for(;d=g[f++];)e=c.propFix[d]||d,zb.test(d)?!Z&&Ia.test(d)?a[c.camelCase("default-"+d)]=a[e]=!1:a[e]=!1:c.attr(a,d,""),a.removeAttribute(Z?d:e)},attrHooks:{type:{set:function(a,b){if(!c.support.radioValue&&"radio"===b&&c.nodeName(a,"input")){var d=a.value;a.setAttribute("type",b);d&&(a.value=
56
- d);return b}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,b,d){var e,f,g;g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g){if(g=1!==g||!c.isXMLDoc(a))b=c.propFix[b]||b,f=c.propHooks[b];return d!==m?f&&"set"in f&&(e=f.set(a,d,b))!==m?e:a[b]=d:f&&"get"in f&&null!==(e=
57
- f.get(a,b))?e:a[b]}},propHooks:{tabIndex:{get:function(a){var b=a.getAttributeNode("tabindex");return b&&b.specified?parseInt(b.value,10):qc.test(a.nodeName)||rc.test(a.nodeName)&&a.href?0:m}}}});yb={get:function(a,b){var d=c.prop(a,b),e="boolean"===typeof d&&a.getAttribute(b);return(d="boolean"===typeof d?Ja&&Z?null!=e:Ia.test(b)?a[c.camelCase("default-"+b)]:!!e:a.getAttributeNode(b))&&!1!==d.value?b.toLowerCase():m},set:function(a,b,d){!1===b?c.removeAttr(a,d):Ja&&Z||!Ia.test(d)?a.setAttribute(!Z&&
58
- c.propFix[d]||d,d):a[c.camelCase("default-"+d)]=a[d]=!0;return d}};Ja&&Z||(c.attrHooks.value={get:function(a,b){var d=a.getAttributeNode(b);return c.nodeName(a,"input")?a.defaultValue:d&&d.specified?d.value:m},set:function(a,b,d){if(c.nodeName(a,"input"))a.defaultValue=b;else return V&&V.set(a,b,d)}});Z||(V=c.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&("id"===b||"name"===b||"coords"===b?""!==c.value:c.specified)?c.value:m},set:function(a,b,c){var e=a.getAttributeNode(c);
59
- e||a.setAttributeNode(e=a.ownerDocument.createAttribute(c));e.value=b+="";return"value"===c||b===a.getAttribute(c)?b:m}},c.attrHooks.contenteditable={get:V.get,set:function(a,b,c){V.set(a,""===b?!1:b,c)}},c.each(["width","height"],function(a,b){c.attrHooks[b]=c.extend(c.attrHooks[b],{set:function(a,c){if(""===c)return a.setAttribute(b,"auto"),c}})}));c.support.hrefNormalized||(c.each(["href","src","width","height"],function(a,b){c.attrHooks[b]=c.extend(c.attrHooks[b],{get:function(a){a=a.getAttribute(b,
60
- 2);return null==a?m:a}})}),c.each(["href","src"],function(a,b){c.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}));c.support.style||(c.attrHooks.style={get:function(a){return a.style.cssText||m},set:function(a,b){return a.style.cssText=b+""}});c.support.optSelected||(c.propHooks.selected=c.extend(c.propHooks.selected,{get:function(a){if(a=a.parentNode)a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex;return null}}));c.support.enctype||(c.propFix.enctype="encoding");c.support.checkOn||
61
- c.each(["radio","checkbox"],function(){c.valHooks[this]={get:function(a){return null===a.getAttribute("value")?"on":a.value}}});c.each(["radio","checkbox"],function(){c.valHooks[this]=c.extend(c.valHooks[this],{set:function(a,b){if(c.isArray(b))return a.checked=0<=c.inArray(c(a).val(),b)}})});var Ka=/^(?:input|select|textarea)$/i,sc=/^key/,tc=/^(?:mouse|contextmenu)|click/,Ab=/^(?:focusinfocus|focusoutblur)$/,Bb=/^([^.]*)(?:\.(.+)|)$/;c.event={global:{},add:function(a,b,d,e,f){var g,h,k,l,u,t,n,q,
62
- p;if(k=c._data(a)){d.handler&&(l=d,d=l.handler,f=l.selector);d.guid||(d.guid=c.guid++);(h=k.events)||(h=k.events={});(u=k.handle)||(u=k.handle=function(a){return typeof c===z||a&&c.event.triggered===a.type?m:c.event.dispatch.apply(u.elem,arguments)},u.elem=a);b=(b||"").match(O)||[""];for(k=b.length;k--;)g=Bb.exec(b[k])||[],q=t=g[1],p=(g[2]||"").split(".").sort(),g=c.event.special[q]||{},q=(f?g.delegateType:g.bindType)||q,g=c.event.special[q]||{},t=c.extend({type:q,origType:t,data:e,handler:d,guid:d.guid,
63
- selector:f,needsContext:f&&c.expr.match.needsContext.test(f),namespace:p.join(".")},l),(n=h[q])||(n=h[q]=[],n.delegateCount=0,g.setup&&!1!==g.setup.call(a,e,p,u)||(a.addEventListener?a.addEventListener(q,u,!1):a.attachEvent&&a.attachEvent("on"+q,u))),g.add&&(g.add.call(a,t),t.handler.guid||(t.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,t):n.push(t),c.event.global[q]=!0;a=null}},remove:function(a,b,d,e,f){var g,h,k,l,u,m,n,q,p,r,B,A=c.hasData(a)&&c._data(a);if(A&&(m=A.events)){b=(b||"").match(O)||
64
- [""];for(u=b.length;u--;)if(k=Bb.exec(b[u])||[],p=B=k[1],r=(k[2]||"").split(".").sort(),p){n=c.event.special[p]||{};p=(e?n.delegateType:n.bindType)||p;q=m[p]||[];k=k[2]&&new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)");for(l=g=q.length;g--;)h=q[g],!f&&B!==h.origType||d&&d.guid!==h.guid||k&&!k.test(h.namespace)||e&&e!==h.selector&&("**"!==e||!h.selector)||(q.splice(g,1),h.selector&&q.delegateCount--,n.remove&&n.remove.call(a,h));l&&!q.length&&(n.teardown&&!1!==n.teardown.call(a,r,A.handle)||
65
- c.removeEvent(a,p,A.handle),delete m[p])}else for(p in m)c.event.remove(a,p+b[u],d,e,!0);c.isEmptyObject(m)&&(delete A.handle,c._removeData(a,"events"))}},trigger:function(a,b,d,e){var f,g,h,k,l,u,t=[d||p],n=ia.call(a,"type")?a.type:a;l=ia.call(a,"namespace")?a.namespace.split("."):[];h=f=d=d||p;if(3!==d.nodeType&&8!==d.nodeType&&!Ab.test(n+c.event.triggered)&&(0<=n.indexOf(".")&&(l=n.split("."),n=l.shift(),l.sort()),g=0>n.indexOf(":")&&"on"+n,a=a[c.expando]?a:new c.Event(n,"object"===typeof a&&a),
66
- a.isTrigger=!0,a.namespace=l.join("."),a.namespace_re=a.namespace?new RegExp("(^|\\.)"+l.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,a.result=m,a.target||(a.target=d),b=null==b?[a]:c.makeArray(b,[a]),l=c.event.special[n]||{},e||!l.trigger||!1!==l.trigger.apply(d,b))){if(!e&&!l.noBubble&&!c.isWindow(d)){k=l.delegateType||n;Ab.test(k+n)||(h=h.parentNode);for(;h;h=h.parentNode)t.push(h),f=h;f===(d.ownerDocument||p)&&t.push(f.defaultView||f.parentWindow||r)}for(u=0;(h=t[u++])&&!a.isPropagationStopped();)a.type=
67
- 1<u?k:l.bindType||n,(f=(c._data(h,"events")||{})[a.type]&&c._data(h,"handle"))&&f.apply(h,b),(f=g&&h[g])&&c.acceptData(h)&&f.apply&&!1===f.apply(h,b)&&a.preventDefault();a.type=n;if(!(e||a.isDefaultPrevented()||l._default&&!1!==l._default.apply(d.ownerDocument,b)||"click"===n&&c.nodeName(d,"a"))&&c.acceptData(d)&&g&&d[n]&&!c.isWindow(d)){(f=d[g])&&(d[g]=null);c.event.triggered=n;try{d[n]()}catch(q){}c.event.triggered=m;f&&(d[g]=f)}return a.result}},dispatch:function(a){a=c.event.fix(a);var b,d,e,
68
- f,g=[],h=C.call(arguments);b=(c._data(this,"events")||{})[a.type]||[];var k=c.event.special[a.type]||{};h[0]=a;a.delegateTarget=this;if(!k.preDispatch||!1!==k.preDispatch.call(this,a)){g=c.event.handlers.call(this,a,b);for(b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,f=0;(d=e.handlers[f++])&&!a.isImmediatePropagationStopped();)if(!a.namespace_re||a.namespace_re.test(d.namespace))a.handleObj=d,a.data=d.data,d=((c.event.special[d.origType]||{}).handle||d.handler).apply(e.elem,
69
- h),d!==m&&!1===(a.result=d)&&(a.preventDefault(),a.stopPropagation());k.postDispatch&&k.postDispatch.call(this,a);return a.result}},handlers:function(a,b){var d,e,f,g,h=[],k=b.delegateCount,l=a.target;if(k&&l.nodeType&&(!a.button||"click"!==a.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(!0!==l.disabled||"click"!==a.type)){f=[];for(g=0;g<k;g++)e=b[g],d=e.selector+" ",f[d]===m&&(f[d]=e.needsContext?0<=c(d,this).index(l):c.find(d,this,null,[l]).length),f[d]&&f.push(e);f.length&&h.push({elem:l,
70
- handlers:f})}k<b.length&&h.push({elem:this,handlers:b.slice(k)});return h},fix:function(a){if(a[c.expando])return a;var b,d,e;b=a.type;var f=a,g=this.fixHooks[b];g||(this.fixHooks[b]=g=tc.test(b)?this.mouseHooks:sc.test(b)?this.keyHooks:{});e=g.props?this.props.concat(g.props):this.props;a=new c.Event(f);for(b=e.length;b--;)d=e[b],a[d]=f[d];a.target||(a.target=f.srcElement||p);3===a.target.nodeType&&(a.target=a.target.parentNode);a.metaKey=!!a.metaKey;return g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
71
- fixHooks:{},keyHooks:{props:["char","charCode","key","keyCode"],filter:function(a,b){null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f=b.button,g=b.fromElement;null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||p,e=c.documentElement,c=c.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||
72
- c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0));!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g);a.which||f===m||(a.which=f&1?1:f&2?3:f&4?2:0);return a}},special:{load:{noBubble:!0},click:{trigger:function(){if(c.nodeName(this,"input")&&"checkbox"===this.type&&this.click)return this.click(),!1}},focus:{trigger:function(){if(this!==p.activeElement&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},
73
- blur:{trigger:function(){if(this===p.activeElement&&this.blur)return this.blur(),!1},delegateType:"focusout"},beforeunload:{postDispatch:function(a){a.result!==m&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,d,e){a=c.extend(new c.Event,d,{type:a,isSimulated:!0,originalEvent:{}});e?c.event.trigger(a,null,b):c.event.dispatch.call(b,a);a.isDefaultPrevented()&&d.preventDefault()}};c.removeEvent=p.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:
74
- function(a,b,c){b="on"+b;a.detachEvent&&(typeof a[b]===z&&(a[b]=null),a.detachEvent(b,c))};c.Event=function(a,b){if(!(this instanceof c.Event))return new c.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||!1===a.returnValue||a.getPreventDefault&&a.getPreventDefault()?ba:R):this.type=a;b&&c.extend(this,b);this.timeStamp=a&&a.timeStamp||c.now();this[c.expando]=!0};c.Event.prototype={isDefaultPrevented:R,isPropagationStopped:R,isImmediatePropagationStopped:R,
75
- preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ba;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ba;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()}};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={delegateType:b,bindType:b,handle:function(a){var e,
76
- f=a.relatedTarget,g=a.handleObj;if(!f||f!==this&&!c.contains(this,f))a.type=g.origType,e=g.handler.apply(this,arguments),a.type=b;return e}}});c.support.submitBubbles||(c.event.special.submit={setup:function(){if(c.nodeName(this,"form"))return!1;c.event.add(this,"click._submit keypress._submit",function(a){a=a.target;(a=c.nodeName(a,"input")||c.nodeName(a,"button")?a.form:m)&&!c._data(a,"submitBubbles")&&(c.event.add(a,"submit._submit",function(a){a._submit_bubble=!0}),c._data(a,"submitBubbles",!0))})},
77
- postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&c.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(c.nodeName(this,"form"))return!1;c.event.remove(this,"._submit")}});c.support.changeBubbles||(c.event.special.change={setup:function(){if(Ka.test(this.nodeName)){if("checkbox"===this.type||"radio"===this.type)c.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),
78
- c.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1);c.event.simulate("change",this,a,!0)});return!1}c.event.add(this,"beforeactivate._change",function(a){a=a.target;Ka.test(a.nodeName)&&!c._data(a,"changeBubbles")&&(c.event.add(a,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||c.event.simulate("change",this.parentNode,a,!0)}),c._data(a,"changeBubbles",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||
79
- a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type)return a.handleObj.handler.apply(this,arguments)},teardown:function(){c.event.remove(this,"._change");return!Ka.test(this.nodeName)}});c.support.focusinBubbles||c.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){c.event.simulate(b,a.target,c.event.fix(a),!0)};c.event.special[b]={setup:function(){0===d++&&p.addEventListener(a,e,!0)},teardown:function(){0===--d&&p.removeEventListener(a,e,!0)}}});c.fn.extend({on:function(a,
80
- b,d,e,f){var g,h;if("object"===typeof a){"string"!==typeof b&&(d=d||b,b=m);for(g in a)this.on(g,b,d,a[g],f);return this}null==d&&null==e?(e=b,d=b=m):null==e&&("string"===typeof b?(e=d,d=m):(e=d,d=b,b=m));if(!1===e)e=R;else if(!e)return this;1===f&&(h=e,e=function(a){c().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=c.guid++));return this.each(function(){c.event.add(this,a,e,d,b)})},one:function(a,b,c,e){return this.on(a,b,c,e,1)},off:function(a,b,d){var e;if(a&&a.preventDefault&&a.handleObj)return e=
81
- a.handleObj,c(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if("object"===typeof a){for(e in a)this.off(e,b,a[e]);return this}if(!1===b||"function"===typeof b)d=b,b=m;!1===d&&(d=R);return this.each(function(){c.event.remove(this,a,d,b)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,e){return this.on(b,a,c,e)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,
82
- "**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){var d=this[0];if(d)return c.event.trigger(a,b,d,!0)}});(function(a,b){function d(a){return ka.test(a+"")}function e(){var a,b=[];return a=function(c,d){b.push(c+=" ")>w.cacheLength&&delete a[b.shift()];return a[c]=d}}function f(a){a[D]=!0;return a}function g(a){var b=E.createElement("div");try{return a(b)}catch(c){return!1}finally{}}function h(a,b,c,d){var e,f,g,
83
- h,k;(b?b.ownerDocument||b:ja)!==E&&J(b);b=b||E;c=c||[];if(!a||"string"!==typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(!P&&!d){if(e=la.exec(a))if(g=e[1])if(9===h)if((f=b.getElementById(g))&&f.parentNode){if(f.id===g)return c.push(f),c}else return c;else{if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&sa(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return F.apply(c,I.call(b.getElementsByTagName(a),0)),c;if((g=e[3])&&x.getByClassName&&b.getElementsByClassName)return F.apply(c,
84
- I.call(b.getElementsByClassName(g),0)),c}if(x.qsa&&!K.test(a)){e=!0;f=D;g=b;k=9===h&&a;if(1===h&&"object"!==b.nodeName.toLowerCase()){h=n(a);(e=b.getAttribute("id"))?f=e.replace(oa,"\\$&"):b.setAttribute("id",f);f="[id='"+f+"'] ";for(g=h.length;g--;)h[g]=f+p(h[g]);g=ba.test(a)&&b.parentNode||b;k=h.join(",")}if(k)try{return F.apply(c,I.call(g.querySelectorAll(k),0)),c}catch(l){}finally{e||b.removeAttribute("id")}}}var m;a:{a=a.replace(Q,"$1");f=n(a);if(!d&&1===f.length){e=f[0]=f[0].slice(0);if(2<e.length&&
85
- "ID"===(m=e[0]).type&&9===b.nodeType&&!P&&w.relative[e[1].type]){b=w.find.ID(m.matches[0].replace(da,ea),b)[0];if(!b){m=c;break a}a=a.slice(e.shift().value.length)}for(h=X.needsContext.test(a)?0:e.length;h--;){m=e[h];if(w.relative[g=m.type])break;if(g=w.find[g])if(d=g(m.matches[0].replace(da,ea),ba.test(e[0].type)&&b.parentNode||b)){e.splice(h,1);a=d.length&&p(e);if(!a){F.apply(c,I.call(d,0));m=c;break a}break}}}L(a,f)(d,b,P,c,ba.test(a));m=c}return m}function k(a,b){var c=b&&a,d=c&&(~b.sourceIndex||
86
- -2147483648)-(~a.sourceIndex||-2147483648);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function l(a){return function(b){return"input"===b.nodeName.toLowerCase()&&b.type===a}}function u(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function m(a){return f(function(b){b=+b;return f(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function n(a,b){var c,d,e,f,g,k,l;if(g=T[a+" "])return b?
87
- 0:g.slice(0);g=a;k=[];for(l=w.preFilter;g;){if(!c||(d=fa.exec(g)))d&&(g=g.slice(d[0].length)||g),k.push(e=[]);c=!1;if(d=ga.exec(g))c=d.shift(),e.push({value:c,type:d[0].replace(Q," ")}),g=g.slice(c.length);for(f in w.filter)!(d=X[f].exec(g))||l[f]&&!(d=l[f](d))||(c=d.shift(),e.push({value:c,type:f,matches:d}),g=g.slice(c.length));if(!c)break}return b?g.length:g?h.error(a):T(a,k).slice(0)}function p(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function r(a,b,c){var d=b.dir,e=c&&"parentNode"===
88
- d,f=W++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,k,La,l=N+" "+f;if(g)for(;b=b[d];){if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e)if(La=b[D]||(b[D]={}),(k=La[d])&&k[0]===l){if(!0===(h=k[1])||h===v)return!0===h}else if(k=La[d]=[l],k[1]=a(b,c,g)||v,!0===k[1])return!0}}function A(a){return 1<a.length?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function B(a,b,c,d,e){for(var f,
89
- g=[],h=0,k=a.length,l=null!=b;h<k;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),l&&b.push(h);return g}function H(a,b,c,d,e,g){d&&!d[D]&&(d=H(d));e&&!e[D]&&(e=H(e,g));return f(function(f,g,k,l){var n,m,u=[],p=[],w=g.length,t;if(!(t=f)){t=b||"*";for(var q=k.nodeType?[k]:k,r=[],ca=0,v=q.length;ca<v;ca++)h(t,q[ca],r);t=r}t=!a||!f&&b?t:B(t,u,a,k,l);q=c?e||(f?a:w||d)?[]:g:t;c&&c(t,q,k,l);if(d)for(n=B(q,p),d(n,[],k,l),k=n.length;k--;)if(m=n[k])q[p[k]]=!(t[p[k]]=m);if(f){if(e||a){if(e){n=[];for(k=q.length;k--;)(m=
90
- q[k])&&n.push(t[k]=m);e(null,q=[],n,l)}for(k=q.length;k--;)(m=q[k])&&-1<(n=e?R.call(f,m):u[k])&&(f[n]=!(g[n]=m))}}else q=B(q===g?q.splice(w,q.length):q),e?e(null,g,q,l):F.apply(g,q)})}function z(a){var b,c,d,e=a.length,f=w.relative[a[0].type];c=f||w.relative[" "];for(var g=f?1:0,h=r(function(a){return a===b},c,!0),k=r(function(a){return-1<R.call(b,a)},c,!0),l=[function(a,c,d){return!f&&(d||c!==ua)||((b=c).nodeType?h(a,c,d):k(a,c,d))}];g<e;g++)if(c=w.relative[a[g].type])l=[r(A(l),c)];else{c=w.filter[a[g].type].apply(null,
91
- a[g].matches);if(c[D]){for(d=++g;d<e&&!w.relative[a[d].type];d++);return H(1<g&&A(l),1<g&&p(a.slice(0,g-1)).replace(Q,"$1"),c,g<d&&z(a.slice(g,d)),d<e&&z(a=a.slice(d)),d<e&&p(a))}l.push(c)}return A(l)}function O(a,b){var c=0,d=0<b.length,e=0<a.length,g=function(f,g,k,l,n){var m,u,p=[],q=0,t="0",r=f&&[],ca=null!=n,x=ua,y=f||e&&w.find.TAG("*",n&&g.parentNode||g),ta=N+=null==x?1:Math.random()||.1;ca&&(ua=g!==E&&g,v=c);for(;null!=(n=y[t]);t++){if(e&&n){for(m=0;u=a[m++];)if(u(n,g,k)){l.push(n);break}ca&&
92
- (N=ta,v=++c)}d&&((n=!u&&n)&&q--,f&&r.push(n))}q+=t;if(d&&t!==q){for(m=0;u=b[m++];)u(r,p,g,k);if(f){if(0<q)for(;t--;)r[t]||p[t]||(p[t]=Z.call(l));p=B(p)}F.apply(l,p);ca&&!f&&0<p.length&&1<q+b.length&&h.uniqueSort(l)}ca&&(N=ta,ua=x);return r};return d?f(g):g}function M(){}var qa,v,w,va,ta,L,ra,ua,J,E,y,P,K,G,wa,sa,Ma,D="sizzle"+-new Date,ja=a.document,x={},N=0,W=0,S=e(),T=e(),U=e(),aa=typeof b,C=[],Z=C.pop,F=C.push,I=C.slice,R=C.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;
93
- return-1},C="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w#"),Y="\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)[\\x20\\t\\r\\n\\f]*(?:([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+C+")|)|)[\\x20\\t\\r\\n\\f]*\\]",V=":((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+Y.replace(3,8)+")*)|.*)\\)|)",Q=RegExp("^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$","g"),fa=/^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/,
94
- ga=/^[\x20\t\r\n\f]*([\x20\t\r\n\f>+~])[\x20\t\r\n\f]*/,ha=new RegExp(V),ia=new RegExp("^"+C+"$"),X={ID:/^#((?:\\.|[\w-]|[^\x00-\xa0])+)/,CLASS:/^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/,NAME:/^\[name=['"]?((?:\\.|[\w-]|[^\x00-\xa0])+)['"]?\]/,TAG:new RegExp("^("+"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w*")+")"),ATTR:new RegExp("^"+Y),PSEUDO:new RegExp("^"+V),CHILD:/^:(only|first|last|nth|nth-last)-(child|of-type)(?:\([\x20\t\r\n\f]*(even|odd|(([+-]|)(\d*)n|)[\x20\t\r\n\f]*(?:([+-]|)[\x20\t\r\n\f]*(\d+)|))[\x20\t\r\n\f]*\)|)/i,
95
- needsContext:/^[\x20\t\r\n\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\([\x20\t\r\n\f]*((?:-\d)?\d*)[\x20\t\r\n\f]*\)|)(?=[^-]|$)/i},ba=/[\x20\t\r\n\f]*[+~]/,ka=/^[^{]+\{\s*\[native code/,la=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ma=/^(?:input|select|textarea|button)$/i,na=/^h\d$/i,oa=/'|\\/g,pa=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,da=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,ea=function(a,b){var c="0x"+b-65536;return c!==c?b:0>c?String.fromCharCode(c+65536):String.fromCharCode(c>>10|55296,
96
- c&1023|56320)};try{I.call(ja.documentElement.childNodes,0)[0].nodeType}catch(Sc){I=function(a){for(var b,c=[];b=this[a++];)c.push(b);return c}}ta=h.isXML=function(a){return(a=a&&(a.ownerDocument||a).documentElement)?"HTML"!==a.nodeName:!1};J=h.setDocument=function(a){var c=a?a.ownerDocument||a:ja;if(c===E||9!==c.nodeType||!c.documentElement)return E;E=c;y=c.documentElement;P=ta(c);x.tagNameNoComments=g(function(a){a.appendChild(c.createComment(""));return!a.getElementsByTagName("*").length});x.attributes=
97
- g(function(a){a.innerHTML="<select></select>";a=typeof a.lastChild.getAttribute("multiple");return"boolean"!==a&&"string"!==a});x.getByClassName=g(function(a){a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>";if(!a.getElementsByClassName||!a.getElementsByClassName("e").length)return!1;a.lastChild.className="e";return 2===a.getElementsByClassName("e").length});x.getByName=g(function(a){a.id=D+0;a.innerHTML="<a name='"+D+"'></a><div name='"+D+"'></div>";y.insertBefore(a,y.firstChild);
98
- var b=c.getElementsByName&&c.getElementsByName(D).length===2+c.getElementsByName(D+0).length;x.getIdNotName=!c.getElementById(D);y.removeChild(a);return b});w.attrHandle=g(function(a){a.innerHTML="<a href='#'></a>";return a.firstChild&&typeof a.firstChild.getAttribute!==aa&&"#"===a.firstChild.getAttribute("href")})?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}};x.getIdNotName?(w.find.ID=function(a,b){if(typeof b.getElementById!==aa&&!P){var c=
99
- b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(da,ea);return function(a){return a.getAttribute("id")===b}}):(w.find.ID=function(a,c){if(typeof c.getElementById!==aa&&!P){var d=c.getElementById(a);return d?d.id===a||typeof d.getAttributeNode!==aa&&d.getAttributeNode("id").value===a?[d]:b:[]}},w.filter.ID=function(a){var b=a.replace(da,ea);return function(a){return(a=typeof a.getAttributeNode!==aa&&a.getAttributeNode("id"))&&a.value===b}});w.find.TAG=x.tagNameNoComments?
100
- function(a,b){if(typeof b.getElementsByTagName!==aa)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f};w.find.NAME=x.getByName&&function(a,b){if(typeof b.getElementsByName!==aa)return b.getElementsByName(name)};w.find.CLASS=x.getByClassName&&function(a,b){if(typeof b.getElementsByClassName!==aa&&!P)return b.getElementsByClassName(a)};G=[];K=[":focus"];if(x.qsa=d(c.querySelectorAll))g(function(a){a.innerHTML=
101
- "<select><option selected=''></option></select>";a.querySelectorAll("[selected]").length||K.push("\\[[\\x20\\t\\r\\n\\f]*(?:checked|disabled|ismap|multiple|readonly|selected|value)");a.querySelectorAll(":checked").length||K.push(":checked")}),g(function(a){a.innerHTML="<input type='hidden' i=''/>";a.querySelectorAll("[i^='']").length&&K.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:\"\"|'')");a.querySelectorAll(":enabled").length||K.push(":enabled",":disabled");a.querySelectorAll("*,:x");K.push(",.*:")});(x.matchesSelector=
102
- d(wa=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector))&&g(function(a){x.disconnectedMatch=wa.call(a,"div");wa.call(a,"[s!='']:x");G.push("!=",V)});K=new RegExp(K.join("|"));G=new RegExp(G.join("|"));sa=d(y.contains)||y.compareDocumentPosition?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&1===d.nodeType&&(c.contains?c.contains(d):a.compareDocumentPosition&&a.compareDocumentPosition(d)&16))}:function(a,
103
- b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1};Ma=y.compareDocumentPosition?function(a,b){var d;return a===b?(ra=!0,0):(d=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b))?d&1||a.parentNode&&11===a.parentNode.nodeType?a===c||sa(ja,a)?-1:b===c||sa(ja,b)?1:0:d&4?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var d,e=0;d=a.parentNode;var f=b.parentNode,g=[a],h=[b];if(a===b)return ra=!0,0;if(!d||!f)return a===c?-1:b===c?1:d?-1:f?1:0;if(d===f)return k(a,
104
- b);for(d=a;d=d.parentNode;)g.unshift(d);for(d=b;d=d.parentNode;)h.unshift(d);for(;g[e]===h[e];)e++;return e?k(g[e],h[e]):g[e]===ja?-1:h[e]===ja?1:0};ra=!1;[0,0].sort(Ma);x.detectDuplicates=ra;return E};h.matches=function(a,b){return h(a,null,null,b)};h.matchesSelector=function(a,b){(a.ownerDocument||a)!==E&&J(a);b=b.replace(pa,"='$1']");if(!(!x.matchesSelector||P||G&&G.test(b)||K.test(b)))try{var c=wa.call(a,b);if(c||x.disconnectedMatch||a.document&&11!==a.document.nodeType)return c}catch(d){}return 0<
105
- h(b,E,null,[a]).length};h.contains=function(a,b){(a.ownerDocument||a)!==E&&J(a);return sa(a,b)};h.attr=function(a,b){var c;(a.ownerDocument||a)!==E&&J(a);P||(b=b.toLowerCase());return(c=w.attrHandle[b])?c(a):P||x.attributes?a.getAttribute(b):((c=a.getAttributeNode(b))||a.getAttribute(b))&&!0===a[b]?b:c&&c.specified?c.value:null};h.error=function(a){throw Error("Syntax error, unrecognized expression: "+a);};h.uniqueSort=function(a){var b,c=[],d=1,e=0;ra=!x.detectDuplicates;a.sort(Ma);if(ra){for(;b=
106
- a[d];d++)b===a[d-1]&&(e=c.push(d));for(;e--;)a.splice(c[e],1)}return a};va=h.getText=function(a){var b,c="",d=0;b=a.nodeType;if(!b)for(;b=a[d];d++)c+=va(b);else if(1===b||9===b||11===b){if("string"===typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=va(a)}else if(3===b||4===b)return a.nodeValue;return c};w=h.selectors={cacheLength:50,createPseudo:f,match:X,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},
107
- "~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){a[1]=a[1].replace(da,ea);a[3]=(a[4]||a[5]||"").replace(da,ea);"~="===a[2]&&(a[3]=" "+a[3]+" ");return a.slice(0,4)},CHILD:function(a){a[1]=a[1].toLowerCase();"nth"===a[1].slice(0,3)?(a[3]||h.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&h.error(a[0]);return a},PSEUDO:function(a){var b,c=!a[5]&&a[2];if(X.CHILD.test(a[0]))return null;a[4]?a[2]=a[4]:c&&ha.test(c)&&(b=n(c,!0))&&(b=
108
- c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b));return a.slice(0,3)}},filter:{TAG:function(a){if("*"===a)return function(){return!0};a=a.replace(da,ea).toLowerCase();return function(b){return b.nodeName&&b.nodeName.toLowerCase()===a}},CLASS:function(a){var b=S[a+" "];return b||(b=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+a+"([\\x20\\t\\r\\n\\f]|$)"))&&S(a,function(a){return b.test(a.className||typeof a.getAttribute!==aa&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){d=
109
- h.attr(d,a);if(null==d)return"!="===b;if(!b)return!0;d+="";return"="===b?d===c:"!="===b?d!==c:"^="===b?c&&0===d.indexOf(c):"*="===b?c&&-1<d.indexOf(c):"$="===b?c&&d.slice(-c.length)===c:"~="===b?-1<(" "+d+" ").indexOf(c):"|="===b?d===c||d.slice(0,c.length+1)===c+"-":!1}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,k){var l,n,m,u,p;c=f!==g?"nextSibling":"previousSibling";var q=b.parentNode,
110
- t=h&&b.nodeName.toLowerCase();k=!k&&!h;if(q){if(f){for(;c;){for(n=b;n=n[c];)if(h?n.nodeName.toLowerCase()===t:1===n.nodeType)return!1;p=c="only"===a&&!p&&"nextSibling"}return!0}p=[g?q.firstChild:q.lastChild];if(g&&k)for(k=q[D]||(q[D]={}),l=k[a]||[],u=l[0]===N&&l[1],m=l[0]===N&&l[2],n=u&&q.childNodes[u];n=++u&&n&&n[c]||(m=u=0)||p.pop();){if(1===n.nodeType&&++m&&n===b){k[a]=[N,u,m];break}}else if(k&&(l=(b[D]||(b[D]={}))[a])&&l[0]===N)m=l[1];else for(;(n=++u&&n&&n[c]||(m=u=0)||p.pop())&&((h?n.nodeName.toLowerCase()!==
111
- t:1!==n.nodeType)||!++m||(k&&((n[D]||(n[D]={}))[a]=[N,m]),n!==b)););m-=e;return m===d||0===m%d&&0<=m/d}}},PSEUDO:function(a,b){var c,d=w.pseudos[a]||w.setFilters[a.toLowerCase()]||h.error("unsupported pseudo: "+a);return d[D]?d(b):1<d.length?(c=[a,a,"",b],w.setFilters.hasOwnProperty(a.toLowerCase())?f(function(a,c){for(var e,f=d(a,b),g=f.length;g--;)e=R.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:f(function(a){var b=[],c=[],d=L(a.replace(Q,"$1"));return d[D]?f(function(a,
112
- b,c,e){e=d(a,null,e,[]);for(var f=a.length;f--;)if(c=e[f])a[f]=!(b[f]=c)}):function(a,e,f){b[0]=a;d(b,null,f,c);return!c.pop()}}),has:f(function(a){return function(b){return 0<h(a,b).length}}),contains:f(function(a){return function(b){return-1<(b.textContent||b.innerText||va(b)).indexOf(a)}}),lang:f(function(a){ia.test(a||"")||h.error("unsupported lang: "+a);a=a.replace(da,ea).toLowerCase();return function(b){var c;do if(c=P?b.getAttribute("xml:lang")||b.getAttribute("lang"):b.lang)return c=c.toLowerCase(),
113
- c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===y},focus:function(a){return a===E.activeElement&&(!E.hasFocus||E.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return!1===a.disabled},disabled:function(a){return!0===a.disabled},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){a.parentNode&&
114
- a.parentNode.selectedIndex;return!0===a.selected},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if("@"<a.nodeName||3===a.nodeType||4===a.nodeType)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return na.test(a.nodeName)},input:function(a){return ma.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==
115
- (b=a.getAttribute("type"))||b.toLowerCase()===a.type)},first:m(function(){return[0]}),last:m(function(a,b){return[b-1]}),eq:m(function(a,b,c){return[0>c?c+b:c]}),even:m(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:m(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:m(function(a,b,c){for(b=0>c?c+b:c;0<=--b;)a.push(b);return a}),gt:m(function(a,b,c){for(c=0>c?c+b:c;++c<b;)a.push(c);return a})}};for(qa in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[qa]=l(qa);
116
- for(qa in{submit:!0,reset:!0})w.pseudos[qa]=u(qa);L=h.compile=function(a,b){var c,d=[],e=[],f=U[a+" "];if(!f){b||(b=n(a));for(c=b.length;c--;)f=z(b[c]),f[D]?d.push(f):e.push(f);f=U(a,O(e,d))}return f};w.pseudos.nth=w.pseudos.eq;w.filters=M.prototype=w.pseudos;w.setFilters=new M;J();h.attr=c.attr;c.find=h;c.expr=h.selectors;c.expr[":"]=c.expr.pseudos;c.unique=h.uniqueSort;c.text=h.getText;c.isXMLDoc=h.isXML;c.contains=h.contains})(r);var uc=/Until$/,vc=/^(?:parents|prev(?:Until|All))/,Ub=/^.[^:#\[\.,]*$/,
117
- Cb=c.expr.match.needsContext,wc={children:!0,contents:!0,next:!0,prev:!0};c.fn.extend({find:function(a){var b,d,e,f=this.length;if("string"!==typeof a)return e=this,this.pushStack(c(a).filter(function(){for(b=0;b<f;b++)if(c.contains(e[b],this))return!0}));d=[];for(b=0;b<f;b++)c.find(a,this[b],d);d=this.pushStack(1<f?c.unique(d):d);d.selector=(this.selector?this.selector+" ":"")+a;return d},has:function(a){var b,d=c(a,this),e=d.length;return this.filter(function(){for(b=0;b<e;b++)if(c.contains(this,
118
- d[b]))return!0})},not:function(a){return this.pushStack(Za(this,a,!1))},filter:function(a){return this.pushStack(Za(this,a,!0))},is:function(a){return!!a&&("string"===typeof a?Cb.test(a)?0<=c(a,this.context).index(this[0]):0<c.filter(a,this).length:0<this.filter(a).length)},closest:function(a,b){for(var d,e=0,f=this.length,g=[],h=Cb.test(a)||"string"!==typeof a?c(a,b||this.context):0;e<f;e++)for(d=this[e];d&&d.ownerDocument&&d!==b&&11!==d.nodeType;){if(h?-1<h.index(d):c.find.matchesSelector(d,a)){g.push(d);
119
- break}d=d.parentNode}return this.pushStack(1<g.length?c.unique(g):g)},index:function(a){return a?"string"===typeof a?c.inArray(this[0],c(a)):c.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){var d="string"===typeof a?c(a,b):c.makeArray(a&&a.nodeType?[a]:a),d=c.merge(this.get(),d);return this.pushStack(c.unique(d))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});c.fn.andSelf=c.fn.addBack;c.each({parent:function(a){return(a=
120
- a.parentNode)&&11!==a.nodeType?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return Ya(a,"nextSibling")},prev:function(a){return Ya(a,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling((a.parentNode||
121
- {}).firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.merge([],a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);uc.test(a)||(e=d);e&&"string"===typeof e&&(f=c.filter(e,f));f=1<this.length&&!wc[a]?c.unique(f):f;1<this.length&&vc.test(a)&&(f=f.reverse());return this.pushStack(f)}});c.extend({filter:function(a,b,d){d&&(a=":not("+a+")");return 1===b.length?c.find.matchesSelector(b[0],
122
- a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&9!==a.nodeType&&(d===m||1!==a.nodeType||!c(a).is(d));)1===a.nodeType&&e.push(a),a=a[b];return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var ab="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",xc=/ jQuery\d+="(?:null|\d+)"/g,Db=new RegExp("<(?:"+ab+")[\\s/>]",
123
- "i"),Na=/^\s+/,Eb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Fb=/<([\w:]+)/,Gb=/<tbody/i,yc=/<|&#?\w+;/,zc=/<(?:script|style|link)/i,Ba=/^(?:checkbox|radio)$/i,Ac=/checked\s*(?:[^=]|=\s*.checked.)/i,Hb=/^$|\/(?:java|ecma)script/i,Wb=/^true\/(.*)/,Bc=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,H={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],
124
- tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:c.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Oa=$a(p).appendChild(p.createElement("div"));H.optgroup=H.option;H.tbody=H.tfoot=H.colgroup=H.caption=H.thead;H.th=H.td;c.fn.extend({text:function(a){return c.access(this,function(a){return a===m?c.text(this):this.empty().append((this[0]&&this[0].ownerDocument||p).createTextNode(a))},
125
- null,a,arguments.length)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapAll(a.call(this,b))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return c.isFunction(a)?this.each(function(b){c(this).wrapInner(a.call(this,b))}):this.each(function(){var b=c(this),d=b.contents();
126
- d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){var b=c.isFunction(a);return this.each(function(d){c(this).wrapAll(b?a.call(this,d):a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){1!==this.nodeType&&11!==
127
- this.nodeType&&9!==this.nodeType||this.insertBefore(a,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,!1,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var d,e=0;null!=(d=this[e]);e++)if(!a||0<c.filter(a,[d]).length)b||1!==d.nodeType||c.cleanData(B(d)),d.parentNode&&(b&&c.contains(d.ownerDocument,d)&&
128
- Aa(B(d,"script")),d.parentNode.removeChild(d));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&c.cleanData(B(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&c.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){a=null==a?!1:a;b=null==b?a:b;return this.map(function(){return c.clone(this,a,b)})},html:function(a){return c.access(this,function(a){var d=this[0]||{},e=0,f=this.length;if(a===m)return 1===d.nodeType?d.innerHTML.replace(xc,
129
- ""):m;if(!("string"!==typeof a||zc.test(a)||!c.support.htmlSerialize&&Db.test(a)||!c.support.leadingWhitespace&&Na.test(a)||H[(Fb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(Eb,"<$1></$2>");try{for(;e<f;e++)d=this[e]||{},1===d.nodeType&&(c.cleanData(B(d,!1)),d.innerHTML=a);d=0}catch(g){}}d&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){c.isFunction(a)||"string"===typeof a||(a=c(a).not(this).detach());return this.domManip([a],!0,function(a){var d=this.nextSibling,
130
- e=this.parentNode;e&&(c(this).remove(),e.insertBefore(a,d))})},detach:function(a){return this.remove(a,!0)},domManip:function(a,b,d){a=ub.apply([],a);var e,f,g,h,k=0,l=this.length,u=this,p=l-1,n=a[0],q=c.isFunction(n);if(q||!(1>=l||"string"!==typeof n||c.support.checkClone)&&Ac.test(n))return this.each(function(c){var e=u.eq(c);q&&(a[0]=n.call(this,c,b?e.html():m));e.domManip(a,b,d)});if(l&&(h=c.buildFragment(a,this[0].ownerDocument,!1,this),e=h.firstChild,1===h.childNodes.length&&(h=e),e)){b=b&&
131
- c.nodeName(e,"tr");g=c.map(B(h,"script"),bb);for(f=g.length;k<l;k++)e=h,k!==p&&(e=c.clone(e,!0,!0),f&&c.merge(g,B(e,"script"))),d.call(b&&c.nodeName(this[k],"table")?Vb(this[k],"tbody"):this[k],e,k);if(f)for(h=g[g.length-1].ownerDocument,c.map(g,cb),k=0;k<f;k++)e=g[k],Hb.test(e.type||"")&&!c._data(e,"globalEval")&&c.contains(h,e)&&(e.src?c.ajax({url:e.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):c.globalEval((e.text||e.textContent||e.innerHTML||"").replace(Bc,"")));h=e=null}return this}});
132
- c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(a){for(var e=0,f=[],g=c(a),h=g.length-1;e<=h;e++)a=e===h?this:this.clone(!0),c(g[e])[b](a),Fa.apply(f,a.get());return this.pushStack(f)}});c.extend({clone:function(a,b,d){var e,f,g,h,k,l=c.contains(a.ownerDocument,a);c.support.html5Clone||c.isXMLDoc(a)||!Db.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(Oa.innerHTML=a.outerHTML,Oa.removeChild(g=Oa.firstChild));
133
- if(!(c.support.noCloneEvent&&c.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||c.isXMLDoc(a)))for(e=B(g),k=B(a),h=0;null!=(f=k[h]);++h)if(e[h]){var m=e[h],p=void 0,n=void 0,q=void 0;if(1===m.nodeType){p=m.nodeName.toLowerCase();if(!c.support.noCloneEvent&&m[c.expando]){q=c._data(m);for(n in q.events)c.removeEvent(m,n,q.handle);m.removeAttribute(c.expando)}if("script"===p&&m.text!==f.text)bb(m).text=f.text,cb(m);else if("object"===p)m.parentNode&&(m.outerHTML=f.outerHTML),c.support.html5Clone&&
134
- f.innerHTML&&!c.trim(m.innerHTML)&&(m.innerHTML=f.innerHTML);else if("input"===p&&Ba.test(f.type))m.defaultChecked=m.checked=f.checked,m.value!==f.value&&(m.value=f.value);else if("option"===p)m.defaultSelected=m.selected=f.defaultSelected;else if("input"===p||"textarea"===p)m.defaultValue=f.defaultValue}}if(b)if(d)for(k=k||B(a),e=e||B(g),h=0;null!=(f=k[h]);h++)db(f,e[h]);else db(a,g);e=B(g,"script");0<e.length&&Aa(e,!l&&B(a,"script"));return g},buildFragment:function(a,b,d,e){for(var f,g,h,k,l,m,
135
- p=a.length,n=$a(b),q=[],r=0;r<p;r++)if((g=a[r])||0===g)if("object"===c.type(g))c.merge(q,g.nodeType?[g]:g);else if(yc.test(g)){h=h||n.appendChild(b.createElement("div"));k=(Fb.exec(g)||["",""])[1].toLowerCase();m=H[k]||H._default;h.innerHTML=m[1]+g.replace(Eb,"<$1></$2>")+m[2];for(f=m[0];f--;)h=h.lastChild;!c.support.leadingWhitespace&&Na.test(g)&&q.push(b.createTextNode(Na.exec(g)[0]));if(!c.support.tbody)for(f=(g="table"!==k||Gb.test(g)?"<table>"!==m[1]||Gb.test(g)?0:h:h.firstChild)&&g.childNodes.length;f--;)c.nodeName(l=
136
- g.childNodes[f],"tbody")&&!l.childNodes.length&&g.removeChild(l);c.merge(q,h.childNodes);for(h.textContent="";h.firstChild;)h.removeChild(h.firstChild);h=n.lastChild}else q.push(b.createTextNode(g));h&&n.removeChild(h);c.support.appendChecked||c.grep(B(q,"input"),Xb);for(r=0;g=q[r++];)if(!e||-1===c.inArray(g,e))if(a=c.contains(g.ownerDocument,g),h=B(n.appendChild(g),"script"),a&&Aa(h),d)for(f=0;g=h[f++];)Hb.test(g.type||"")&&d.push(g);return n},cleanData:function(a,b){for(var d,e,f,g,h=0,k=c.expando,
137
- l=c.cache,m=c.support.deleteExpando,p=c.event.special;null!=(d=a[h]);h++)if(b||c.acceptData(d))if(g=(f=d[k])&&l[f]){if(g.events)for(e in g.events)p[e]?c.event.remove(d,e):c.removeEvent(d,e,g.handle);l[f]&&(delete l[f],m?delete d[k]:typeof d.removeAttribute!==z?d.removeAttribute(k):d[k]=null,I.push(f))}}});var ga,T,U,Pa=/alpha\([^)]*\)/i,Cc=/opacity\s*=\s*([^)]*)/,Dc=/^(top|right|bottom|left)$/,Ec=/^(none|table(?!-c[ea]).+)/,Ib=/^margin/,Yb=new RegExp("^("+pa+")(.*)$","i"),ka=new RegExp("^("+pa+")(?!px)[a-z%]+$",
138
- "i"),Fc=new RegExp("^([+-])=("+pa+")","i"),lb={BODY:"block"},Gc={position:"absolute",visibility:"hidden",display:"block"},Jb={letterSpacing:0,fontWeight:400},S=["Top","Right","Bottom","Left"],fb=["Webkit","O","Moz","ms"];c.fn.extend({css:function(a,b){return c.access(this,function(a,b,f){var g,h={},k=0;if(c.isArray(b)){g=T(a);for(f=b.length;k<f;k++)h[b[k]]=c.css(a,b[k],!1,g);return h}return f!==m?c.style(a,b,f):c.css(a,b)},a,b,1<arguments.length)},show:function(){return gb(this,!0)},hide:function(){return gb(this)},
139
- toggle:function(a){var b="boolean"===typeof a;return this.each(function(){(b?a:fa(this))?c(this).show():c(this).hide()})}});c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=U(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,k=c.camelCase(b),
140
- l=a.style;b=c.cssProps[k]||(c.cssProps[k]=eb(l,k));h=c.cssHooks[b]||c.cssHooks[k];if(d!==m){if(g=typeof d,"string"===g&&(f=Fc.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(c.css(a,b)),g="number"),!(null==d||"number"===g&&isNaN(d)||("number"!==g||c.cssNumber[k]||(d+="px"),c.support.clearCloneStyle||""!==d||0!==b.indexOf("background")||(l[b]="inherit"),h&&"set"in h&&(d=h.set(a,d,e))===m)))try{l[b]=d}catch(p){}}else return h&&"get"in h&&(f=h.get(a,!1,e))!==m?f:l[b]}},css:function(a,b,d,e){var f,g;g=c.camelCase(b);
141
- b=c.cssProps[g]||(c.cssProps[g]=eb(a.style,g));(g=c.cssHooks[b]||c.cssHooks[g])&&"get"in g&&(f=g.get(a,!0,d));f===m&&(f=U(a,b,e));"normal"===f&&b in Jb&&(f=Jb[b]);return""===d||d?(a=parseFloat(f),!0===d||c.isNumeric(a)?a||0:f):f},swap:function(a,b,c,e){var f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];c=c.apply(a,e||[]);for(f in b)a.style[f]=g[f];return c}});r.getComputedStyle?(T=function(a){return r.getComputedStyle(a,null)},U=function(a,b,d){var e,f=(d=d||T(a))?d.getPropertyValue(b)||d[b]:m,
142
- g=a.style;d&&(""!==f||c.contains(a.ownerDocument,a)||(f=c.style(a,b)),ka.test(f)&&Ib.test(b)&&(a=g.width,b=g.minWidth,e=g.maxWidth,g.minWidth=g.maxWidth=g.width=f,f=d.width,g.width=a,g.minWidth=b,g.maxWidth=e));return f}):p.documentElement.currentStyle&&(T=function(a){return a.currentStyle},U=function(a,b,c){var e,f,g=(c=c||T(a))?c[b]:m,h=a.style;null==g&&h&&h[b]&&(g=h[b]);if(ka.test(g)&&!Dc.test(b)){c=h.left;if(f=(e=a.runtimeStyle)&&e.left)e.left=a.currentStyle.left;h.left="fontSize"===b?"1em":g;
143
- g=h.pixelLeft+"px";h.left=c;f&&(e.left=f)}return""===g?"auto":g});c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(a,e,f){if(e)return 0===a.offsetWidth&&Ec.test(c.css(a,"display"))?c.swap(a,Gc,function(){return kb(a,b,f)}):kb(a,b,f)},set:function(a,e,f){var g=f&&T(a);return ib(a,e,f?jb(a,b,f,c.support.boxSizing&&"border-box"===c.css(a,"boxSizing",!1,g),g):0)}}});c.support.opacity||(c.cssHooks.opacity={get:function(a,b){return Cc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||
144
- "")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var d=a.style,e=a.currentStyle,f=c.isNumeric(b)?"alpha(opacity="+100*b+")":"",g=e&&e.filter||d.filter||"";d.zoom=1;if((1<=b||""===b)&&""===c.trim(g.replace(Pa,""))&&d.removeAttribute&&(d.removeAttribute("filter"),""===b||e&&!e.filter))return;d.filter=Pa.test(g)?g.replace(Pa,f):g+" "+f}});c(function(){c.support.reliableMarginRight||(c.cssHooks.marginRight={get:function(a,b){if(b)return c.swap(a,{display:"inline-block"},U,[a,"marginRight"])}});
145
- !c.support.pixelPosition&&c.fn.position&&c.each(["top","left"],function(a,b){c.cssHooks[b]={get:function(a,e){if(e)return e=U(a,b),ka.test(e)?c(a).position()[b]+"px":e}}})});c.expr&&c.expr.filters&&(c.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!c.support.reliableHiddenOffsets&&"none"===(a.style&&a.style.display||c.css(a,"display"))},c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)});c.each({margin:"",padding:"",border:"Width"},function(a,b){c.cssHooks[a+
146
- b]={expand:function(c){var e=0,f={};for(c="string"===typeof c?c.split(" "):[c];4>e;e++)f[a+S[e]+b]=c[e]||c[e-2]||c[0];return f}};Ib.test(a)||(c.cssHooks[a+b].set=ib)});var Hc=/%20/g,Zb=/\[\]$/,Kb=/\r?\n/g,Ic=/^(?:submit|button|image|reset|file)$/i,Jc=/^(?:input|select|textarea|keygen)/i;c.fn.extend({serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=c.prop(this,"elements");return a?c.makeArray(a):this}).filter(function(){var a=this.type;
147
- return this.name&&!c(this).is(":disabled")&&Jc.test(this.nodeName)&&!Ic.test(a)&&(this.checked||!Ba.test(a))}).map(function(a,b){var d=c(this).val();return null==d?null:c.isArray(d)?c.map(d,function(a){return{name:b.name,value:a.replace(Kb,"\r\n")}}):{name:b.name,value:d.replace(Kb,"\r\n")}}).get()}});c.param=function(a,b){var d,e=[],f=function(a,b){b=c.isFunction(b)?b():null==b?"":b;e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};b===m&&(b=c.ajaxSettings&&c.ajaxSettings.traditional);
148
- if(c.isArray(a)||a.jquery&&!c.isPlainObject(a))c.each(a,function(){f(this.name,this.value)});else for(d in a)Ca(d,a[d],b,f);return e.join("&").replace(Hc,"+")};c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){c.fn[b]=function(a,c){return 0<arguments.length?this.on(b,null,a,c):this.trigger(b)}});c.fn.hover=function(a,
149
- b){return this.mouseenter(a).mouseleave(b||a)};var F,W,Qa=c.now(),Ra=/\?/,Kc=/#.*$/,Lb=/([?&])_=[^&]*/,Lc=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,Mc=/^(?:GET|HEAD)$/,Nc=/^\/\//,Mb=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Nb=c.fn.load,Ob={},Da={},Pb="*/".concat("*");try{W=bc.href}catch(a){W=p.createElement("a"),W.href="",W=W.href}F=Mb.exec(W.toLowerCase())||[];c.fn.load=function(a,b,d){if("string"!==typeof a&&Nb)return Nb.apply(this,arguments);var e,f,g,h=this,k=a.indexOf(" ");0<=k&&(e=a.slice(k,a.length),
150
- a=a.slice(0,k));c.isFunction(b)?(d=b,b=m):b&&"object"===typeof b&&(g="POST");0<h.length&&c.ajax({url:a,type:g,dataType:"html",data:b}).done(function(a){f=arguments;h.html(e?c("<div>").append(c.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,f||[a.responseText,b,a])});return this};c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(a){return this.on(b,a)}});c.each(["get","post"],function(a,b){c[b]=function(a,e,f,g){c.isFunction(e)&&
151
- (g=g||f,f=e,e=m);return c.ajax({url:a,type:b,dataType:g,data:e,success:f})}});c.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:W,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(F[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",
152
- text:"responseText"},converters:{"* text":r.String,"text html":!0,"text json":c.parseJSON,"text xml":c.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ea(Ea(a,c.ajaxSettings),b):Ea(c.ajaxSettings,a)},ajaxPrefilter:nb(Ob),ajaxTransport:nb(Da),ajax:function(a,b){function d(a,b,d,e){var f,t,J,E,y=b;if(2!==M){M=2;k&&clearTimeout(k);p=m;h=e||"";v.readyState=0<a?4:0;if(d){E=n;e=v;var C,K,G,z,I=E.contents,F=E.dataTypes,D=E.responseFields;for(z in D)z in d&&(e[D[z]]=d[z]);for(;"*"===
153
- F[0];)F.shift(),K===m&&(K=E.mimeType||e.getResponseHeader("Content-Type"));if(K)for(z in I)if(I[z]&&I[z].test(K)){F.unshift(z);break}if(F[0]in d)G=F[0];else{for(z in d){if(!F[0]||E.converters[z+" "+F[0]]){G=z;break}C||(C=z)}G=G||C}G?(G!==F[0]&&F.unshift(G),E=d[G]):E=void 0}if(200<=a&&300>a||304===a)if(n.ifModified&&((d=v.getResponseHeader("Last-Modified"))&&(c.lastModified[g]=d),(d=v.getResponseHeader("etag"))&&(c.etag[g]=d)),204===a)f=!0,y="nocontent";else if(304===a)f=!0,y="notmodified";else{a:{t=
154
- n;J=E;var L,x,y={};C=0;K=t.dataTypes.slice();G=K[0];t.dataFilter&&(J=t.dataFilter(J,t.dataType));if(K[1])for(x in t.converters)y[x.toLowerCase()]=t.converters[x];for(;d=K[++C];)if("*"!==d){if("*"!==G&&G!==d){x=y[G+" "+d]||y["* "+d];if(!x)for(L in y)if(f=L.split(" "),f[1]===d&&(x=y[G+" "+f[0]]||y["* "+f[0]])){!0===x?x=y[L]:!0!==y[L]&&(d=f[0],K.splice(C--,0,d));break}if(!0!==x)if(x&&t["throws"])J=x(J);else try{J=x(J)}catch(N){f={state:"parsererror",error:x?N:"No conversion from "+G+" to "+d};break a}}G=
155
- d}f={state:"success",data:J}}y=f.state;t=f.data;J=f.error;f=!J}else if(J=y,a||!y)y="error",0>a&&(a=0);v.status=a;v.statusText=(b||y)+"";f?A.resolveWith(q,[t,y,v]):A.rejectWith(q,[v,y,J]);v.statusCode(H);H=m;l&&r.trigger(f?"ajaxSuccess":"ajaxError",[v,n,f?t:J]);B.fireWith(q,[v,y]);l&&(r.trigger("ajaxComplete",[v,n]),--c.active||c.event.trigger("ajaxStop"))}}"object"===typeof a&&(b=a,a=m);b=b||{};var e,f,g,h,k,l,p,t,n=c.ajaxSetup({},b),q=n.context||n,r=n.context&&(q.nodeType||q.jquery)?c(q):c.event,
156
- A=c.Deferred(),B=c.Callbacks("once memory"),H=n.statusCode||{},C={},z={},M=0,I="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===M){if(!t)for(t={};b=Lc.exec(h);)t[b[1].toLowerCase()]=b[2];b=t[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===M?h:null},setRequestHeader:function(a,b){var c=a.toLowerCase();M||(a=z[c]=z[c]||a,C[a]=b);return this},overrideMimeType:function(a){M||(n.mimeType=a);return this},statusCode:function(a){var b;if(a)if(2>M)for(b in a)H[b]=
157
- [H[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){a=a||I;p&&p.abort(a);d(0,a);return this}};A.promise(v).complete=B.add;v.success=v.done;v.error=v.fail;n.url=((a||n.url||W)+"").replace(Kc,"").replace(Nc,F[1]+"//");n.type=b.method||b.type||n.method||n.type;n.dataTypes=c.trim(n.dataType||"*").toLowerCase().match(O)||[""];null==n.crossDomain&&(e=Mb.exec(n.url.toLowerCase()),n.crossDomain=!(!e||e[1]===F[1]&&e[2]===F[2]&&(e[3]||("http:"===e[1]?80:443))==(F[3]||("http:"===F[1]?80:443))));
158
- n.data&&n.processData&&"string"!==typeof n.data&&(n.data=c.param(n.data,n.traditional));ob(Ob,n,b,v);if(2===M)return v;(l=n.global)&&0===c.active++&&c.event.trigger("ajaxStart");n.type=n.type.toUpperCase();n.hasContent=!Mc.test(n.type);g=n.url;n.hasContent||(n.data&&(g=n.url+=(Ra.test(g)?"&":"?")+n.data,delete n.data),!1===n.cache&&(n.url=Lb.test(g)?g.replace(Lb,"$1_="+Qa++):g+(Ra.test(g)?"&":"?")+"_="+Qa++));n.ifModified&&(c.lastModified[g]&&v.setRequestHeader("If-Modified-Since",c.lastModified[g]),
159
- c.etag[g]&&v.setRequestHeader("If-None-Match",c.etag[g]));(n.data&&n.hasContent&&!1!==n.contentType||b.contentType)&&v.setRequestHeader("Content-Type",n.contentType);v.setRequestHeader("Accept",n.dataTypes[0]&&n.accepts[n.dataTypes[0]]?n.accepts[n.dataTypes[0]]+("*"!==n.dataTypes[0]?", "+Pb+"; q=0.01":""):n.accepts["*"]);for(f in n.headers)v.setRequestHeader(f,n.headers[f]);if(n.beforeSend&&(!1===n.beforeSend.call(q,v,n)||2===M))return v.abort();I="abort";for(f in{success:1,error:1,complete:1})v[f](n[f]);
160
- if(p=ob(Da,n,b,v)){v.readyState=1;l&&r.trigger("ajaxSend",[v,n]);n.async&&0<n.timeout&&(k=setTimeout(function(){v.abort("timeout")},n.timeout));try{M=1,p.send(C,d)}catch(w){if(2>M)d(-1,w);else throw w;}}else d(-1,"No Transport");return v},getScript:function(a,b){return c.get(a,m,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")}});c.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},
161
- converters:{"text script":function(a){c.globalEval(a);return a}}});c.ajaxPrefilter("script",function(a){a.cache===m&&(a.cache=!1);a.crossDomain&&(a.type="GET",a.global=!1)});c.ajaxTransport("script",function(a){if(a.crossDomain){var b,d=p.head||c("head")[0]||p.documentElement;return{send:function(c,f){b=p.createElement("script");b.async=!0;a.scriptCharset&&(b.charset=a.scriptCharset);b.src=a.url;b.onload=b.onreadystatechange=function(a,c){if(c||!b.readyState||/loaded|complete/.test(b.readyState))b.onload=
162
- b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success")};d.insertBefore(b,d.firstChild)},abort:function(){if(b)b.onload(m,!0)}}}});var Qb=[],Sa=/(=)\?(?=&|$)|\?\?/;c.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||c.expando+"_"+Qa++;this[a]=!0;return a}});c.ajaxPrefilter("json jsonp",function(a,b,d){var e,f,g,h=!1!==a.jsonp&&(Sa.test(a.url)?"url":"string"===typeof a.data&&!(a.contentType||"").indexOf("application/x-www-form-urlencoded")&&
163
- Sa.test(a.data)&&"data");if(h||"jsonp"===a.dataTypes[0])return e=a.jsonpCallback=c.isFunction(a.jsonpCallback)?a.jsonpCallback():a.jsonpCallback,h?a[h]=a[h].replace(Sa,"$1"+e):!1!==a.jsonp&&(a.url+=(Ra.test(a.url)?"&":"?")+a.jsonp+"="+e),a.converters["script json"]=function(){g||c.error(e+" was not called");return g[0]},a.dataTypes[0]="json",f=r[e],r[e]=function(){g=arguments},d.always(function(){r[e]=f;a[e]&&(a.jsonpCallback=b.jsonpCallback,Qb.push(e));g&&c.isFunction(f)&&f(g[0]);g=f=m}),"script"});
164
- var Q,X,Oc=0,Ta=r.ActiveXObject&&function(){for(var a in Q)Q[a](m,!0)};c.ajaxSettings.xhr=r.ActiveXObject?function(){var a;if(!(a=!this.isLocal&&pb()))a:{try{a=new r.ActiveXObject("Microsoft.XMLHTTP");break a}catch(b){}a=void 0}return a}:pb;X=c.ajaxSettings.xhr();c.support.cors=!!X&&"withCredentials"in X;(X=c.support.ajax=!!X)&&c.ajaxTransport(function(a){if(!a.crossDomain||c.support.cors){var b;return{send:function(d,e){var f,g,h=a.xhr();a.username?h.open(a.type,a.url,a.async,a.username,a.password):
165
- h.open(a.type,a.url,a.async);if(a.xhrFields)for(g in a.xhrFields)h[g]=a.xhrFields[g];a.mimeType&&h.overrideMimeType&&h.overrideMimeType(a.mimeType);a.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");try{for(g in d)h.setRequestHeader(g,d[g])}catch(k){}h.send(a.hasContent&&a.data||null);b=function(d,g){var p,t,n,q;try{if(b&&(g||4===h.readyState))if(b=m,f&&(h.onreadystatechange=c.noop,Ta&&delete Q[f]),g)4!==h.readyState&&h.abort();else{q={};p=h.status;t=h.getAllResponseHeaders();
166
- "string"===typeof h.responseText&&(q.text=h.responseText);try{n=h.statusText}catch(r){n=""}p||!a.isLocal||a.crossDomain?1223===p&&(p=204):p=q.text?200:404}}catch(r){g||e(-1,r)}q&&e(p,n,q,t)};a.async?4===h.readyState?setTimeout(b):(f=++Oc,Ta&&(Q||(Q={},c(r).unload(Ta)),Q[f]=b),h.onreadystatechange=b):b()},abort:function(){b&&b(m,!0)}}}});var Y,xa,Pc=/^(?:toggle|show|hide)$/,Qc=new RegExp("^(?:([+-])=|)("+pa+")([a-z%]*)$","i"),Rc=/queueHooks$/,la=[function(a,b,d){var e,f,g,h,k,l,m=this,p=a.style,n=
167
- {},q=[],r=a.nodeType&&fa(a);d.queue||(k=c._queueHooks(a,"fx"),null==k.unqueued&&(k.unqueued=0,l=k.empty.fire,k.empty.fire=function(){k.unqueued||l()}),k.unqueued++,m.always(function(){m.always(function(){k.unqueued--;c.queue(a,"fx").length||k.empty.fire()})}));1===a.nodeType&&("height"in b||"width"in b)&&(d.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===c.css(a,"display")&&"none"===c.css(a,"float")&&(c.support.inlineBlockNeedsLayout&&"inline"!==hb(a.nodeName)?p.zoom=1:p.display="inline-block"));
168
- d.overflow&&(p.overflow="hidden",c.support.shrinkWrapBlocks||m.always(function(){p.overflow=d.overflow[0];p.overflowX=d.overflow[1];p.overflowY=d.overflow[2]}));for(f in b)g=b[f],Pc.exec(g)&&(delete b[f],e=e||"toggle"===g,g!==(r?"hide":"show")&&q.push(f));if(b=q.length)for(g=c._data(a,"fxshow")||c._data(a,"fxshow",{}),("hidden"in g)&&(r=g.hidden),e&&(g.hidden=!r),r?c(a).show():m.done(function(){c(a).hide()}),m.done(function(){var b;c._removeData(a,"fxshow");for(b in n)c.style(a,b,n[b])}),f=0;f<b;f++)e=
169
- q[f],h=m.createTween(e,r?g[e]:0),n[e]=g[e]||c.style(a,e),e in g||(g[e]=h.start,r&&(h.end=h.start,h.start="width"===e||"height"===e?1:0))}],ha={"*":[function(a,b){var d,e,f=this.createTween(a,b),g=Qc.exec(b),h=f.cur(),k=+h||0,l=1,m=20;if(g){d=+g[2];e=g[3]||(c.cssNumber[a]?"":"px");if("px"!==e&&k){k=c.css(f.elem,a,!0)||d||1;do l=l||".5",k/=l,c.style(f.elem,a,k+e);while(l!==(l=f.cur()/h)&&1!==l&&--m)}f.unit=e;f.start=k;f.end=g[1]?k+(g[1]+1)*d:d}return f}]};c.Animation=c.extend(rb,{tweener:function(a,
170
- b){c.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var d,e=0,f=a.length;e<f;e++)d=a[e],ha[d]=ha[d]||[],ha[d].unshift(b)},prefilter:function(a,b){b?la.unshift(a):la.push(a)}});c.Tween=A;A.prototype={constructor:A,init:function(a,b,d,e,f,g){this.elem=a;this.prop=d;this.easing=f||"swing";this.options=b;this.start=this.now=this.cur();this.end=e;this.unit=g||(c.cssNumber[d]?"":"px")},cur:function(){var a=A.propHooks[this.prop];return a&&a.get?a.get(this):A.propHooks._default.get(this)},run:function(a){var b,
171
- d=A.propHooks[this.prop];this.pos=this.options.duration?b=c.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):b=a;this.now=(this.end-this.start)*b+this.start;this.options.step&&this.options.step.call(this.elem,this.now,this);d&&d.set?d.set(this):A.propHooks._default.set(this);return this}};A.prototype.init.prototype=A.prototype;A.propHooks={_default:{get:function(a){return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(a=c.css(a.elem,a.prop,""))&&"auto"!==a?
172
- a:0:a.elem[a.prop]},set:function(a){if(c.fx.step[a.prop])c.fx.step[a.prop](a);else a.elem.style&&(null!=a.elem.style[c.cssProps[a.prop]]||c.cssHooks[a.prop])?c.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}};A.propHooks.scrollTop=A.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}};c.each(["toggle","show","hide"],function(a,b){var d=c.fn[b];c.fn[b]=function(a,c,g){return null==a||"boolean"===typeof a?d.apply(this,arguments):this.animate(ma(b,
173
- !0),a,c,g)}});c.fn.extend({fadeTo:function(a,b,c,e){return this.filter(fa).css("opacity",0).show().end().animate({opacity:b},a,c,e)},animate:function(a,b,d,e){var f=c.isEmptyObject(a),g=c.speed(b,d,e),h=function(){var b=rb(this,c.extend({},a),g);h.finish=function(){b.stop(!0)};(f||c._data(this,"finish"))&&b.stop(!0)};h.finish=h;return f||!1===g.queue?this.each(h):this.queue(g.queue,h)},stop:function(a,b,d){var e=function(a){var b=a.stop;delete a.stop;b(d)};"string"!==typeof a&&(d=b,b=a,a=m);b&&!1!==
174
- a&&this.queue(a||"fx",[]);return this.each(function(){var b=!0,g=null!=a&&a+"queueHooks",h=c.timers,k=c._data(this);if(g)k[g]&&k[g].stop&&e(k[g]);else for(g in k)k[g]&&k[g].stop&&Rc.test(g)&&e(k[g]);for(g=h.length;g--;)h[g].elem!==this||null!=a&&h[g].queue!==a||(h[g].anim.stop(d),b=!1,h.splice(g,1));!b&&d||c.dequeue(this,a)})},finish:function(a){!1!==a&&(a=a||"fx");return this.each(function(){var b,d=c._data(this),e=d[a+"queue"];b=d[a+"queueHooks"];var f=c.timers,g=e?e.length:0;d.finish=!0;c.queue(this,
175
- a,[]);b&&b.cur&&b.cur.finish&&b.cur.finish.call(this);for(b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)e[b]&&e[b].finish&&e[b].finish.call(this);delete d.finish})}});c.each({slideDown:ma("show"),slideUp:ma("hide"),slideToggle:ma("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(a,c,f){return this.animate(b,a,c,f)}});c.speed=function(a,b,d){var e=a&&"object"===typeof a?c.extend({},
176
- a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:"number"===typeof e.duration?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;if(null==e.queue||!0===e.queue)e.queue="fx";e.old=e.complete;e.complete=function(){c.isFunction(e.old)&&e.old.call(this);e.queue&&c.dequeue(this,e.queue)};return e};c.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}};c.timers=[];c.fx=A.prototype.init;
177
- c.fx.tick=function(){var a,b=c.timers,d=0;for(Y=c.now();d<b.length;d++)a=b[d],a()||b[d]!==a||b.splice(d--,1);b.length||c.fx.stop();Y=m};c.fx.timer=function(a){a()&&c.timers.push(a)&&c.fx.start()};c.fx.interval=13;c.fx.start=function(){xa||(xa=setInterval(c.fx.tick,c.fx.interval))};c.fx.stop=function(){clearInterval(xa);xa=null};c.fx.speeds={slow:600,fast:200,_default:400};c.fx.step={};c.expr&&c.expr.filters&&(c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length});
178
- c.fn.offset=function(a){if(arguments.length)return a===m?this:this.each(function(b){c.offset.setOffset(this,a,b)});var b,d,e={top:0,left:0},f=(d=this[0])&&d.ownerDocument;if(f){b=f.documentElement;if(!c.contains(b,d))return e;typeof d.getBoundingClientRect!==z&&(e=d.getBoundingClientRect());d=sb(f);return{top:e.top+(d.pageYOffset||b.scrollTop)-(b.clientTop||0),left:e.left+(d.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}}};c.offset={setOffset:function(a,b,d){var e=c.css(a,"position");"static"===e&&
179
- (a.style.position="relative");var f=c(a),g=f.offset(),h=c.css(a,"top"),k=c.css(a,"left"),l={},m={};("absolute"===e||"fixed"===e)&&-1<c.inArray("auto",[h,k])?(m=f.position(),e=m.top,k=m.left):(e=parseFloat(h)||0,k=parseFloat(k)||0);c.isFunction(b)&&(b=b.call(a,d,g));null!=b.top&&(l.top=b.top-g.top+e);null!=b.left&&(l.left=b.left-g.left+k);"using"in b?b.using.call(a,l):f.css(l)}};c.fn.extend({position:function(){if(this[0]){var a,b,d={top:0,left:0},e=this[0];"fixed"===c.css(e,"position")?b=e.getBoundingClientRect():
180
- (a=this.offsetParent(),b=this.offset(),c.nodeName(a[0],"html")||(d=a.offset()),d.top+=c.css(a[0],"borderTopWidth",!0),d.left+=c.css(a[0],"borderLeftWidth",!0));return{top:b.top-d.top-c.css(e,"marginTop",!0),left:b.left-d.left-c.css(e,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||p.documentElement;a&&!c.nodeName(a,"html")&&"static"===c.css(a,"position");)a=a.offsetParent;return a||p.documentElement})}});c.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},
181
- function(a,b){var d=/Y/.test(b);c.fn[a]=function(e){return c.access(this,function(a,e,h){var k=sb(a);if(h===m)return k?b in k?k[b]:k.document.documentElement[e]:a[e];k?k.scrollTo(d?c(k).scrollLeft():h,d?h:c(k).scrollTop()):a[e]=h},a,e,arguments.length,null)}});c.each({Height:"height",Width:"width"},function(a,b){c.each({padding:"inner"+a,content:b,"":"outer"+a},function(d,e){c.fn[e]=function(e,g){var h=arguments.length&&(d||"boolean"!==typeof e),k=d||(!0===e||!0===g?"margin":"border");return c.access(this,
182
- function(b,d,e){return c.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(d=b.documentElement,Math.max(b.body["scroll"+a],d["scroll"+a],b.body["offset"+a],d["offset"+a],d["client"+a])):e===m?c.css(b,d,k):c.style(b,d,e,k)},b,h?e:m,h,null)}})});r.jQuery=r.$=c;"function"===typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return c})})(window);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
miniorange_2_factor_settings.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
6
- * Version: 5.5.75
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * Text Domain: miniorange-2-factor-authentication
@@ -14,7 +14,7 @@
14
  require dirname(__FILE__).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'email-IPaddress.php';
15
 
16
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
17
- define( 'MO2F_VERSION', '5.5.75' );
18
  define( 'MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
19
  define( 'MO2F_TEST_MODE', false );
20
  define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
6
+ * Version: 5.5.76
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * Text Domain: miniorange-2-factor-authentication
14
  require dirname(__FILE__).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'email-IPaddress.php';
15
 
16
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
17
+ define( 'MO2F_VERSION', '5.5.76' );
18
  define( 'MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
19
  define( 'MO2F_TEST_MODE', false );
20
  define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
readme.txt CHANGED
@@ -1,999 +1,1003 @@
1
- === miniOrange's Google Authenticator - WordPress Two Factor Authentication (2FA , Two Factor, OTP SMS and Email) | Passwordless login ===
2
-
3
- Contributors: twofactor, twofactorauthentication, hsn97,cyberlord92
4
- Tags: google authenticator,two factor,two factor authentication, OTP Authentication, 2FA , wp 2fa, 2-factor authentication, multi factor authentication , MFA ,two step verification, TFA, mobile verification, MFA, Remember Device, OTP Over Telegram, Mobile Authentication, 2 step authentication, passwordless login, QR Code Authentication, email verification, KBA, Security Questions, login with SMS, Authy, Authy two factor , FIDO, FIDO2, Webauthn, multi factor, wordfence, IP Blocking, IP Whitelisting, SMS login, OTP Over SMS and Email, login without password, Mobile verification, password free authentication, session restriction.
5
- Donate link: https://miniorange.com/
6
- Requires at least: 3.0.1
7
- Tested up to: 6.0
8
- Requires PHP: 5.3.0
9
- Stable tag: 5.5.75
10
- License: GPLv2 or later
11
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
-
13
- Google Authenticator-multi Factor(WP 2FA / OTP) - Supports TOTP/OTP Login based methods like Duo/Google Authenticator along with OTP Over SMS/Email & more.
14
-
15
- == Description ==
16
-
17
- **Google Authenticator - Two Factor (WP 2FA / OTP)** - Provides *secure login* to WordPress. This plugin can be configured for any **TOTP-based/OTP Login** methods like Duo/Microsoft/Google Authenticator. It supports OTP login based 2fa methods.
18
-
19
- You can check out following video to configure google authenticator as a two factor:
20
-
21
- [youtube https://youtu.be/_nkMCkxLcIs]
22
-
23
- = Trial for Google authenticator Premium and Enterprise plugin =
24
- We do provide 7 days trial of our Google Authenticator Premium plugins. You can test all Premium features including 2fa methods/OTP authentication methods such as google authenticator, OTP Over SMS/Email.
25
-
26
- = [Google Authenticator - Two step verification/ 2 Factor Authentication/ WP 2FA] FREE Plugin Features =
27
- * Simplified & easy user interface to set up **Google Authenticator** and other Two-Factor Authentication ( WP 2FA/TFA/OTP ) methods.
28
- * **3 Users** forever FREE!
29
- * QR Code authentication, Push Notification, Soft Token and Security Questions(KBA) are supported in the plugin for multi factor authentication(WP 2FA/TFA).
30
- * Includes Language Translation Support
31
- * **[User Profile 2fa](https://plugins.miniorange.com/how-to-set-up-2-factor-from-wordpress-user-profile-section):** Administrators can set up Two Factor (TFA)of users via WordPress users section
32
- * **Multi Factor Authentication(MFA):** This feature can be used to invoke any two factor method on login among multiple methods which were configured. You can configure multiple TOTP/OTP Login based 2fa methods that can be used as a **backup 2fa method**
33
- * **Two-Factor Authentication** ( TFA/2FA ) for Ajax login forms like User Pro, login with ajax, Theme my login, etc with all authentication methods.
34
- * **Passwordless login** and login with phone number
35
- * **[Prevent account sharing](https://security.miniorange.com/restricting-users-from-sharing-their-login-credentials/):** Google Authenticator(WP 2FA) is OTP login based method which restricts users from sharing WordPress login credentials which help to secure WordPress Websites. The Google authenticator plugin also adds a session control feature that limits user sessions based on WordPress User activities.
36
- * This plugin Supports standard TOTP
37
- * Two-Factor Authentication (WP 2FA/TFA) allows authentication on the login page itself for Google Authenticator & miniOrange Soft Token
38
- * **[Multiple Login Options](https://docs.miniorange.com/documentation/login-username-2nd-factor-2):** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login /Login without password /Password free authentication
39
- * Recovery codes in case you are locked out for all Two-Factor Authentication (WP 2FA/TFA)
40
- * **Mobile verification - two step verification** (WP 2FA/TFA) using a user's mobile phone with authentication method like google authenticator, QR code authentication, etc.
41
-
42
- = Additional Features other than the basic Google Authenticator two-factor authentication =
43
-
44
- * Complete Web Security suite to protect wordpress from any attacks
45
- * Web Application Firewall (WAF): Wordpress Firewall to protect your site
46
- * OWASP TOP 10 Protection
47
- * Login Protection: Spam and Login Protection
48
- * Malware scanner: Detects any virus, malware and trojan
49
- * Backup: Taking Encrypted Backup with local storage and cloud storage
50
- * Limit Login Attempts to stop password guessing
51
- * Realtime Global IP Blocking
52
- * Limit Rate of Request: Protecting resources from any security hole exploit
53
- * Crawler Detection and blocking
54
- * Blocking IP and Attacks
55
- * Country Blocking and Browser Blocking
56
- * Brute Force Attacks prevention to stop password hack
57
- * Captcha for Bot Detection
58
- * Google Recaptcha
59
- * Login Form Protection
60
- * Registration Form Protection
61
- * Integration with different plugin - WooCommerce, Buddypress, Ultimate Member and others
62
- * Reporting
63
- * Audit Log
64
-
65
- = Apps Supported by the two-factor authentication (2FA / MFA) plugin =
66
- * Google Authenticator
67
- * miniOrange Authenticator
68
- * Duo Authenticator
69
- * Microsoft Authenticator
70
- * Authy 2 Factor Authenticator
71
- * LastPass Authenticator
72
- * FreeOTP Authenticator
73
-
74
- = User Identity Verification or multi-factor authentication with Google Authenticator =
75
- **Login and Registration:** Verify users on login with different OTP Login methods & other two factor methods like OTP over SMS, OTP Over Email, OTP Over Telegram, Google Authenticator, SMS Verification, Email, Authy Authenticator, Duo Authenticator, Microsoft Authenticator, TOTP Based Authenticator, Security Questions, and many others.
76
- Users will receive an OTP at the time of registration which will be used to verify their identity. OTP authentication can be done either via OTP Login methods(OTP Over email or via OTP over SMS).
77
-
78
- = Plugin Integrations and Support for all methods of two-factor authentication/two step verification ( WP 2FA/TFA/OTP Authentication ) =
79
- Our plugin is integrated with [popular Plugins](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa#integrations) such as WooCommerce and Ultimate member.
80
-
81
- = Third Party Custom SMS Gateway for OTP Over SMS ( OTP Login/two-factor authentication / 2FA ) =
82
- The premium plugin supports any third-party **custom SMS Gateway**. If you don't have your SMS gateway you can use miniOrange gateway and send SMS(OTP over SMS) all over the world for OTP authentication.
83
- [Here](https://plugins.miniorange.com/supported-sms-email-gateways) are some famous gateways supported for two factor (WP 2FA/TFA/OTP).
84
- [Test your Gateway](https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig)
85
-
86
- = Why do you need to register for Google Authenticator? =
87
-
88
- **Google authenticator** uses miniOrange APIs to communicate between your WP and miniOrange. To keep this communication secure, we ask you to register and assign API keys specific to your account. This way your account and users' calls can be only accessed by API keys assigned to you.
89
- Adding to this, you can also use the same account on multiple applications and your users do not have to maintain multiple accounts or WordPress 2FA like Google Authenticator if you are using our cloud solution. Single code generated in Google Authenticator will be enough to log in to all sites. With this, you can also achieve sync of **two-factor authentication on multiple sites**.
90
-
91
- = Google Authenticator ( WP 2FA - two-factor authentication ) Premium Lite Plugin Features =
92
-
93
- * Google Authenticator - Two-Factor Authentication (WP 2FA/TFA) for all users and all user roles *( Site-based pricing )*
94
- * **Two-Factor Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Authentication( OTP Over Email & OTP Over SMS), Email Verification, Mobile Verification *( SMS credits need to be purchased as per the need)*
95
- * **[Multiple Login Options](https://docs.miniorange.com/documentation/login-username-2nd-factor-2):** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login /Login without password /Password free authentication. With google authenticator plugin, the 2FA plugin user is authenticated directly with the second layer of security without entering the password. You can opt between a password and 2FA or only a second factor.
96
- * **Unlimited Email transactions:** miniOrange's google authenticator plugin provides unlimited Email transactions with your SMTP server
97
- * **Backup Method:** KBA(Security Questions), OTP Over Email, Backup codes if you are unable to validate two step verification
98
- * [User role based redirection after Login](https://docs.miniorange.com/documentation/custom-redirect-login-url)
99
- * [Customize account name in Google Authenticator app](https://docs.miniorange.com/documentation/google-authenticator-app-name)
100
- * [Custom Security Questions (KBA)](https://docs.miniorange.com/documentation/custom-security-questions)
101
- * [Role based 2 Factor](https://docs.miniorange.com/documentation/specific-set-authentication-methods-based-role)
102
- * [Force Two factor for users](https://docs.miniorange.com/documentation/enforce-2fa-users)
103
- * [Email notification to users asking them to set up Two-Factor Authentication (WP 2FA/TFA)](https://docs.miniorange.com/documentation/want-send-email-notification-users-setting-2-factor)
104
- * [Set Privacy Policy for users](https://docs.miniorange.com/documentation/privacy-policy-site)
105
- * [Remember Device to skip 2fa](https://docs.miniorange.com/documentation/remember-my-device)
106
- * **Customizable Login UI Popup:** Using google authenticator plugin you can customize the user interface of the login popup as per your preference.
107
-
108
- = Google Authenticator ( WP 2FA / OTP ) Enterprise Plugin Features =
109
-
110
- * [Google Authenticator - Two-Factor Authentication](https://plugins.miniorange.com/2-factor-authentication-for-wordpress) - 2FA for Users as per the upgrade *( User-based pricing )*
111
- * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Authentication(OTP Over Email, OTP Over SMS or OTP Over SMS and Email), Email Verification, Hardware Token. *( SMS and Email credits need to be purchased for successful OTP authentication as per the need)*
112
- * **Multiple Login Options:** Username + password + two-factor Authentication (or) Username + two-factor authentication(2FA) i.e. Passwordless login /Login without password /Password free authentication.
113
- * **Backup Methods:** KBA(Security Questions), OTP Over Email, Backup Codes
114
- * **[Sync 2fa for multiple websites](https://plugins.miniorange.com/two-factor-authentication-2fa-for-multiple-wordpress-websites)**
115
- * **Multisite compatible** for all WordPress 2FA methods.
116
- * Email notification to users asking them to set up Google Authenticator - Two-Factor Authentication (WP 2FA/TFA).
117
- * User **role based redirection** after Login, Custom Security Questions (KBA), Customize account name in Google Authenticator app.
118
- * Enable Two-Factor Authentication (WP 2FA/OTP) for specific Users/User Roles
119
- * Choose specific two-factor authentication methods for Users
120
- * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
121
- * **Brute force attack prevention, IP Blocking & User login Monitoring**
122
- * File protection & strong password
123
- * Monitoring current Google Authenticator and other two-factor authentication (2 Factor) method of all the users in the plugin
124
- * Session restriction
125
-
126
- = Add Ons for two-factor authentication ( WP 2FA / OTP ) =
127
-
128
- * RBA & Trusted Devices Management Add-on Features for two-factor authentication ( WP 2FA/OTP Login )
129
- * **Remember Device** to skip the two-factor authentication ( 2 Factor ) from the **trusted devices**.
130
- * Set **Device Limit** for the users to login
131
-
132
- * Personalization Add-on Features to customize your two-factor authentication/OTP Authentication pages
133
- * Custom UI of Two-Factor Authentication (WP 2FA/TFA) pop-ups
134
- * Custom Email and SMS Templates
135
- * Customize 'Powered by' Logo on wp 2fa authentication page
136
- * Customize Plugin Icon
137
- * Customize Plugin Name
138
-
139
- * Short Codes Add-on Features for two-factor authentication ( 2FA / MFA )
140
- * Turn on/off 2 factor (two-factor authentication) by user
141
- * Reconfigure 2fa methods
142
- * 'Enable Remember Device' from a custom login form to skip 2 factor for trusted devices.
143
- * On-Demand ShortCodes for specific functionalities ( like for enabling WordPress 2FA (Two-Factor authentication) for specific pages)
144
-
145
- * [Device restriction with webauthn/ FIDO2](https://plugins.miniorange.com/passwordless-login-with-web-authentication-wordpress)
146
- Password free authentication is possible with WebAuthn.
147
-
148
- Check all the features other than two-factor authentication ( Two step verification/OTP authentication ) here: [miniOrange Website](https://security.miniorange.com/)
149
-
150
- <h4>Useful blog posts about two-factor authentication ( 2FA / MFA ) plugin </h4>
151
- * [Beginner’s Guide: How to Add Two-Factor Authentication to WordPress](https://themeisle.com/blog/how-to-add-two-factor-authentication-to-wordpress/)
152
- * [How to Add WordPress Two-Factor Authentication (WP 2FA/TFA)](https://phppot.com/wordpress/how-to-add-wordpress-two-factor-authentication-2fa-using-google-authenticator-plugin/)
153
- * [How to translate WordPress Two-Factor Authentication (WP 2FA/TFA)](https://plugins.miniorange.com/the-plugin-translate-spanish-language-with-2-factor-wordpress)
154
-
155
- Customized solutions and Active support are available. Email us at info@xecurify.com or call us at +1 9786589387.
156
-
157
- **Note: The plugin is GDPR Compliant and supports a wide variety of Language Translation**
158
-
159
- == Installation ==
160
-
161
- = From your WordPress dashboard =
162
- 1. Navigate to `Plugins > Add New` from your WP Admin dashboard.
163
- 2. Search for `miniOrange 2 Factor Authentication (2FA)`or `Google Authenticator.`
164
- 3. Install `miniOrange 2 Factor Authentication (2FA)` and activate the plugin.
165
-
166
- = From WordPress.org =
167
- 1. Search for `miniOrange 2 Factor Authentication (2FA)` and download it.
168
- 2. Unzip and upload the `miniorange-2-factor-authentication (2FA)` directory to your `/wp-content/plugins/` directory.
169
- 3. Activate miniOrange 2 Factor Authentication (2FA) from the Plugins tab of your admin dashboard.
170
-
171
- = Once Activated [Google Authenticator - Two Step Verification]=
172
- 1. Select miniOrange 2-Factor ( 2 factor authentication ) from the left menu and follow the instructions.
173
- 2. Configure any 2 factor method, say Google Authenticator.
174
- 2. Once, you complete your setup. Click on the Log Out button.
175
- 3. Enter the username and password. After the initial validation, you will be prompted for the 2-factor method you had set up.
176
- 4. Validate yourself with the 2-factor authentication(WP 2FA/TFA) method you configured.
177
-
178
- **Video Guide** :
179
- [youtube https://youtu.be/_nkMCkxLcIs]
180
-
181
- == Frequently Asked Questions ==
182
-
183
- = How do I gain access to my website if I get locked out using the Google Authenticator? =
184
-
185
- You can obtain access to your website by one of the below options:
186
-
187
- 1. If you have an additional administrator account whose Two Factor (2FA) is not enabled yet, you can login with it.
188
- 2. If you had set up KBA questions earlier, you can use them as an alternate method to login to your website instead of 2FA.
189
- 3. Rename the plugin from FTP - this disables the Google Authenticator (WP 2FA/TFA) plugin and you will be able to login with your WordPress username and password.
190
-
191
- For detailed information, Please check on our website. <a href="https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/" target="_blank">Locked Out</a>.<br>
192
- You can also check our video Tutorial:
193
- [youtube https://www.youtube.com/watch?v=wLFKakQkpk8]
194
-
195
- = I want to enable Google Authenticator 2 Factor authentication (2FA) as the backup method? =
196
-
197
- You can use google authenticator as the backup method for your specific user or all users in the premium version of the two-factor authentication. [PREMIUM FEATURE]
198
-
199
- = I have enabled Two-Factor Authentication (2FA / TFA) for all users, what happens if an end-user tries to login but has not yet registered? =
200
-
201
- If a user has not set up Two-Factor yet, the user has to register by inline registration that will be invoked during the login.
202
-
203
- = I want to enable only one authentication method for my users. What should I do? =
204
-
205
- You can select the two-factor authentication methods under the Login Settings tab. The selected authentication methods will be shown to the user during inline registration for example if you select Google Authenticator it will be shown on login. [PREMIUM FEATURE]
206
-
207
- = I have a custom/front-end login page on my site and I want the look and feel to remain the same when I add 2 factor ? =
208
-
209
- If you have a custom login form other than wp-login.php then we will provide you the shortcode. Shortcode will work only for the customized login page created from WordPress plugins. We are not claiming that it will work with all the customized login pages. In such a case, custom work is needed to integrate two factor with your customized login page. You can submit a query in our <b>Support Section</b> in the plugin or you can contact us at info@xecurify.com for more details.
210
-
211
- = I have installed plugins that limit the login attempts like Limit Login Attempt, Loginizer, Wordfence, etc. Are there any incompatibilities with these kinds of plugins? =
212
-
213
- The limit login attempt kind of plugins limit the number of login attempts and block the IP temporarily. So if you are using 2 factor(WP 2fa/TFA) along with these kinds of plugins then you should increase the login attempts (minimum 5) so that you don't get locked out yourself.
214
-
215
- = If you are using any Security Plugin in WordPress like Simple Security Firewall, All in One WP Security Plugin and you are not able to login with Two-Factor. =
216
-
217
- Our Two-Factor plugin is compatible with most of the security plugins, but if it is not working for you. Please submit a query in our Support Section in the plugin or you can contact us at info@xecurify.com.
218
-
219
- = If you are using any render-blocking javascript and CSS plugin like Async JS and CSS Plugin and you are not able to login with Two-Factor or your screen got blank. =
220
-
221
- If you are using Async JS and CSS Plugin. Please go to its settings and add jquery to the list of exceptions and save settings. It will work. If you are still not able to get it right, Please submit a query in our Support Section in the plugin or you can contact us at info@xecurify.com.
222
-
223
- = My phone has no internet connectivity and I am entering the one time passcode from miniOrange Authenticator App during OTP login, it says Invalid OTP?
224
-
225
- Click on the <b>Settings Icon</b> on top right corner in <b>miniOrange Authenticator App</b> and then press <b>Sync button</b> under 'Time correction for codes' to sync your time with miniOrange Servers. If you still can't logged in then please email us at info@xecurify.com or <a href="https://miniorange.com/contact" target="_blank">Contact us</a>.Soft Token method is just like google authenticator method.
226
-
227
- = I am upgrading my phone. =
228
-
229
- You should go to <b>Setup Two Factor (2FA) </b> Tab and click on <b>Reconfigure</b> to reconfigure 2-Factor with your new phone.
230
-
231
- == Screenshots ==
232
-
233
- 1. Google Authenticator (WP 2FA/OTP) - Setup different 2 Factor methods
234
- 2. Google Authenticator (WP 2FA/OTP) - Test 2 factor configured
235
- 3. Google Authenticator (WP 2FA/OTP) - 2 Factor Authentication (2FA) methods available
236
- 4. Google Authenticator (WP 2FA/OTP) - Google Authenticator login
237
- 5. Google Authenticator (WP 2FA/OTP) - QR code 2 Factor (2FA) login
238
- 6. Google Authenticator (WP 2FA/OTP) - miniOrange Authenticator login
239
- 7. Google Authenticator (WP 2FA/OTP) - Push notification login
240
- 8. Google Authenticator (WP 2FA/OTP) - Remember device and personalization add-ons
241
-
242
- == Changelog ==
243
-
244
- = 5.5.75 =
245
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
246
- * Bug Fixes and Code Improvements
247
-
248
- = 5.5.7 =
249
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
250
- * Bug Fixes and Code Improvements
251
-
252
- = 5.5.6 =
253
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
254
- * Bug Fixes
255
-
256
- = 5.5.5 =
257
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
258
- * Compatibility with Wordpress v6.0
259
- * Added SMS transactions link
260
-
261
- = 5.5.4 =
262
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
263
- * Minor Bug fix
264
-
265
- = 5.5.3 =
266
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
267
- * UI fixes for non-admin users
268
-
269
- = 5.5.2 =
270
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
271
- * Updated Plugin UI
272
-
273
- = 5.5.1 =
274
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
275
- * Updated Pricing page UI
276
-
277
- = 5.5 =
278
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
279
- * Updated Network Security UI
280
-
281
- For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/changelog.txt) provided with the plugin.
282
-
283
- == Upgrade Notice ==
284
-
285
- = 5.5.7 =
286
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
287
- * Bug Fixes and Code Improvements
288
-
289
- = 5.5.1 =
290
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
291
- * Updated Pricing page UI
292
-
293
- = 5.5 =
294
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
295
- * Updated Network Security UI
296
-
297
- = 5.4.52 =
298
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
299
- * Updated Trial Request Form
300
-
301
- = 5.4.51 =
302
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
303
- * Trial notification visibility issue fixed
304
-
305
- = 5.4.50 =
306
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
307
- * Bug fix - Headers already sent
308
-
309
- = 5.4.49 =
310
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
311
- * Trial Notification for Premium Plugins
312
- * CSRF Fix
313
-
314
- = 5.4.48 =
315
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
316
- * Close button on offer banner
317
-
318
- = 5.4.47 =
319
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
320
- * Christmas offer
321
-
322
- = 5.4.46 =
323
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
324
- * Black friday offer
325
- * Get email notification on the plugin's new release
326
-
327
- = 5.4.45 =
328
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
329
- * Added login with the any configured methods
330
- * Minor bug fix
331
-
332
- = 5.4.44 =
333
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
334
- * Added link to WordPress forum in support form
335
- * Minor bug fix
336
-
337
- = 5.4.43 =
338
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
339
- * Special offer - Special discount for limited time
340
-
341
- = 5.4.42 =
342
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
343
- * Backup Code as a cloud service
344
-
345
- = 5.4.41 =
346
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
347
- * Minor UI Changes and Bug Fixes
348
-
349
- = 5.4.40 =
350
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
351
- * XSS Vulnerability fix
352
- * Added video link for miniOrange Authenticator
353
-
354
- = 5.4.39 =
355
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
356
- * Added 2FA setup using user profile option
357
- * Support Form UI
358
- * 2FA Form support for login with ajax, Elementor Pro, UserPro login forms
359
- * Minor bug fixes
360
-
361
- = 5.4.38 =
362
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
363
- * Added 2FA setup using user profile option
364
- * Setup Wizard for configuring 2FA
365
- * 2FA Form support for login with ajax, Elementor Pro, UserPro login forms
366
- * Minor bug fixes
367
-
368
- = 5.4.37 =
369
- * Google Authenticator - Two factor Authentication (2FA, OTP) :
370
- * Minor bug fixes
371
-
372
- = 5.4.36 =
373
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
374
- * Remove extra comma
375
-
376
- = 5.4.35 =
377
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
378
- * Minor bug fixes
379
-
380
- = 5.4.34 =
381
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
382
- * New User Interface for easy setup
383
- * Added developers logs
384
- * Minor fixes
385
-
386
- = 5.4.33 =
387
- * Google Authenticator – Two Factor Authentication (2FA, TFA) :
388
- * New pricing page for two factor authentication
389
- * Added Duo Authenticator push notification method.
390
- * WooCommerce redirect issue fix.
391
-
392
- = 5.4.32 =
393
- * Google Authenticator Two Factor Authentication (2FA, TFA) :
394
- * Replaced sessions with transient.
395
-
396
- = 5.4.31 =
397
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
398
- * OTP over Email as two factor fix
399
- * Low Email transaction alert fix
400
-
401
- = 5.4.30 =
402
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
403
- * Feedback changes
404
-
405
- = 5.4.29 =
406
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
407
- * Session independent Google Authenticator
408
- * Session independent KBA
409
- * Feedback improvement for two factor authentication plugin
410
-
411
- = 5.4.28 =
412
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
413
- * New year sale update
414
-
415
- = 5.4.27 =
416
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
417
- * New year sale
418
- * WordPress 5.6 compatibility fix
419
- * WAF fixes
420
- * Real time IP blocking
421
- * IP based user login
422
- * New feature release notification
423
-
424
- = 5.4.26 =
425
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
426
- * Christmas Offer
427
-
428
- = 5.4.25 =
429
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
430
- * OTP over Telegram Fixes
431
-
432
- = 5.4.24 =
433
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
434
- * OTP over Whatsapp
435
- * OTP over Telegram
436
- * Feedback form changes
437
-
438
- = 5.4.23 =
439
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
440
- * Call support with technical team
441
- * Email and SMS transaction sync
442
- * Feedback form on network deactivate
443
- * Enable/Disable 2FA fix
444
- * 2FA added for super admin role
445
-
446
- = 5.4.22 =
447
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
448
- * Backup Codes
449
- * Sanitization and JS improvements
450
- * SMS and Email Sync
451
- * Whatsapp based Two factor in Premium plugin
452
- * Telegram based Two factor in Premium plugin
453
-
454
- = 5.4.21 =
455
- * Google Authenticator - Two Factor Authentication (2FA, SMS) :
456
- * Sanitization of some input values.
457
-
458
- = 5.4.20 =
459
- * Google Authenticator - Two Factor Authentication (2FA, SMS) :
460
- * Google Authenticator Qr code fix.
461
- * My theme login Login fix.
462
-
463
- = 5.4.19 =
464
- * Google Authenticator - Two Factor Authentication (2FA, OTP) : Google Authenticator cloud fix.
465
-
466
- = 5.4.18 =
467
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
468
- * Added missing file
469
-
470
- = 5.4.17 =
471
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
472
- *Digimember Form Support
473
- *Memberpress Form Support
474
- *SMS Verification Support
475
- *OTP Verification on WooCommerce Registration
476
-
477
- = 5.4.16 =
478
- * Google Authenticator - Two Factor Authentication (2FA, OTP) : Quick form fix.
479
-
480
- = 5.4.15 =
481
- * Google Authenticator - Two Factor Authentication (2FA, OTP) :
482
- * Theme My Login plugin Support
483
- * Ultimate Member Registration Support
484
- * WooCommerce Registration Support
485
- * Ultimate Member Redirect
486
- * Restrict Content Pro Login and Registration
487
-
488
- = 5.4.14 =
489
- * Google Authenticator - Two Factor Authentication (2FA, MFA) : Performance improvement with fixes in Security Questions. And User Email verification and Phone Verification issues resolved.
490
-
491
- = 5.4.13 =
492
- * Google Authenticator - Two Factor Authentication (2FA, TFA) : Support Form Improvement.
493
-
494
- = 5.4.11 =
495
- * Google Authenticator - Two Factor Authentication (2FA, MFA) : Feedback Issue fix.
496
-
497
- = 5.4.9 =
498
- * Google Authenticator - Two Factor Authentication (2FA, TFA) : User Experience, new support form and Security disabled by default. Added New Methods for users to choose.
499
-
500
- = 5.4.8 =
501
- * Google Authenticator - Two Factor Authentication (2FA, OTP Verification) : Learning Management System support, Microsoft Authenticator and Duo Authenticator support and restrict account sharing add-on.
502
-
503
- = 5.4.7 =
504
- * Google Authenticator - Two Factor Authentication (2FA, SMS Verification) : Fixing warnings and adding minor changes in the plans.
505
-
506
- = 5.4.6 =
507
- * Google Authenticator - Two Factor Authentication (2FA) : Improving Google Authenticator and adding Payment options.
508
-
509
- = 5.4.5 =
510
- * Google Authenticator - Two Factor Authentication (2FA, OTP) : Security and MFA UI updates.
511
-
512
- = 5.4.4 =
513
- * Google Authenticator - Two Factor Authentication (2FA, TFA) : Two Factor : WooCommerce login page integration.
514
-
515
- = 5.4.3 =
516
- * Google Authenticator - Two Factor Authentication (2FA, MFA) : Session issue fix for customers using Two Factor.
517
-
518
- = 5.4.2 =
519
- * Google Authenticator - Two Factor Authentication (2FA, MFA) : Warning for cloud customer moving to on-premise Two factor
520
-
521
- = 5.4.1 =
522
- * Google Authenticator - Two Factor Authentication (2FA) : Headers sent issue is security firewall.
523
-
524
- = 5.4.0 =
525
- * Google Authenticator - Two Factor Authentication (2FA) : Two Factor FAQ Fix and OTP code convenience.
526
-
527
- = 5.3.26 =
528
- * Google Authenticator - Two Factor Authentication (2FA) : Two Factor On-premise FAQ update.
529
-
530
- = 5.3.25 =
531
- * Google Authenticator - Two Factor Authentication (2FA) : Two Factor On-premise support form.
532
-
533
- = 5.3.24 =
534
- * Google Authenticator - Two Factor Authentication (2FA) : On-premise two factor released with multiple user support for some authentication methods.
535
-
536
- = 5.3.23 =
537
- * Google Authenticator - Two Factor Authentication (2FA) : Scanner : Timing and caching issue fix.
538
- * Disable 2fa on WooCommerce login.
539
- * Login with Username only fix.
540
-
541
- = 5.3.22 =
542
- * Google Authenticator - Two Factor Authentication (2FA) : Antivirus : Fixing Cache issues and adding nonce.
543
-
544
- = 5.3.21 =
545
- * Google Authenticator - Two Factor Authentication (2FA) : Two Factor : Choice between Two factor and Security.
546
-
547
- = 5.3.20 =
548
- * Google Authenticator - Two Factor Authentication (2FA) : Anti Malware : Fixing issue faced by users during scan.
549
-
550
- = 5.3.19 =
551
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Giving users choice of two factor.
552
-
553
- = 5.3.18 =
554
- * Google Authenticator - Two Factor Authentication (2FA) : Antivirus and Firewall : Fix Scan.
555
-
556
- = 5.3.17 =
557
- * Google Authenticator - Two Factor Authentication (2FA) : Anti-Virus : Improved Stop Scan.
558
-
559
- = 5.3.16 =
560
- * Google Authenticator - Two Factor Authentication (2FA) : Anti-Virus : Stop Scan.
561
-
562
- = 5.3.15 =
563
- * Google Authenticator - Two Factor Authentication (2FA) : Anti-Malware : schedule scan.
564
-
565
- = 5.3.14 =
566
- * Google Authenticator - Two Factor Authentication (2FA) : Anti-Malware : Adding more signatures.
567
-
568
- = 5.3.13 =
569
- * Google Authenticator - Two Factor Authentication (2FA) : Security : fix UI Issue and improving 2fa.
570
-
571
- = 5.3.12 =
572
- * Google Authenticator - Two Factor Authentication (2FA) : Security : backup table fix.
573
-
574
- = 5.3.11 =
575
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Limiting Firewall, Malware, backup and login security for users not needing it.
576
-
577
- = 5.3.10 =
578
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Moved to Old WAF version minor issues..
579
-
580
- = 5.3.9 =
581
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Web application Firewall Sql Injections report and monitoring.
582
-
583
- = 5.3.8 =
584
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Malware Scanner Fix.
585
-
586
- = 5.3.7 =
587
- * Google Authenticator - Two Factor Authentication (2FA) : Security : Two factor login with username fix.
588
-
589
- = 5.3.6 =
590
- * Google Authenticator - Two Factor Authentication (2FA) : Anti virus zip file fix.
591
-
592
- = 5.3.5 =
593
- * Google Authenticator - Two Factor Authentication (2FA) : Backup URL Fix and space issue in google authenticator.
594
-
595
- = 5.3.4 =
596
- * Google Authenticator - Two Factor Authentication (2FA) : CSS fix for Malware Scanner, Security and firewall.
597
-
598
- = 5.3.3 =
599
- * Google Authenticator - Two Factor Authentication (2FA) : Minor Malware Scanner issues fix.
600
-
601
- = 5.3.2 =
602
- * Google Authenticator - Two Factor Authentication (2FA) : File Changes.
603
-
604
- = 5.3.1 =
605
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
606
-
607
- = 5.3.0 =
608
- * Google Authenticator - Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
609
-
610
- = 5.2.6 =
611
- * Google Authenticator - Two Factor Authentication (2FA) : Fixed conflict and filter issues.
612
-
613
- = 5.2.5 =
614
- * Google Authenticator - Two Factor Authentication (2FA) : Some warnings in remote posts.
615
-
616
- = 5.2.4 =
617
- * Google Authenticator - Two Factor Authentication (2FA) : Removed curl calls and unnecessary files.
618
-
619
- = 5.2.3 =
620
- * Google Authenticator - Two Factor Authentication (2FA) : Fix for some users facing issues in api calls.
621
-
622
- = 5.2.2 =
623
- * Google Authenticator - Two Factor Authentication (2FA) : Adding File Protection and Strong Password feature.
624
- :
625
- = 5.2.1 =
626
- * Google Authenticator - Two Factor Authentication (2FA) : UI changes for description.
627
-
628
- = 5.2.0 =
629
- * Google Authenticator - Two Factor Authentication (2FA) : UI changes with more description.
630
-
631
- = 5.1.22 =
632
- * Google Authenticator - Two Factor Authentication (2FA) : UI Fixes.
633
-
634
- = 5.1.21 =
635
- * Google Authenticator - Two Factor Authentication (2FA) : Login Redirect.
636
-
637
- = 5.1.20 =
638
- * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix.
639
-
640
- = 5.1.19 =
641
- * Google Authenticator - Two Factor Authentication (2FA) : Adding basic Security Features Monitoring, IP blocking and login transaction report.
642
-
643
- = 5.1.18 =
644
- * Google Authenticator - Two Factor Authentication (2FA) : Object access error for lower PHP versions.
645
-
646
- = 5.1.17 =
647
- * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix and Documentation changes.
648
-
649
- = 5.1.16 =
650
- * Google Authenticator - Two Factor Authentication (2FA) : Login redirect fix.
651
-
652
- = 5.1.15 =
653
- * Google Authenticator - Two Factor Authentication (2FA) : UI Fixes.
654
-
655
- = 5.1.14 =
656
- * Google Authenticator - Two Factor Authentication (2FA) : Database Error Fix and Custom Redirect.
657
-
658
- = 5.1.12 =
659
- * Google Authenticator - Two Factor Authentication (2FA) : Removing redundant code.
660
-
661
- = 5.1.11 =
662
- * Google Authenticator - Two Factor Authentication (2FA) : Password Pattern Fix.
663
-
664
- = 5.1.10 =
665
- * Google Authenticator - Two Factor Authentication (2FA) : Javascript Error fixes.
666
-
667
- = 5.1.9 =
668
- * Google Authenticator - Two Factor Authentication (2FA) : Added visual tour and security fixes.
669
-
670
- = 5.1.8 =
671
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for Validation.
672
-
673
- = 5.1.7 =
674
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for DB error after Update.
675
-
676
- = 5.1.6 =
677
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for DB error.
678
-
679
- = 5.1.5 =
680
- * Google Authenticator - Two Factor Authentication (2FA) : UI changes.
681
-
682
- = 5.1.4 =
683
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes for redirect to login page issues.
684
-
685
- = 5.1.3 =
686
- * Google Authenticator - Two Factor Authentication (2FA) : Minor bug fixes.
687
-
688
- = 5.1.2 =
689
- * Google Authenticator - Two Factor Authentication (2FA) : Changes in registration flow.
690
-
691
- = 5.1.1 =
692
- * Google Authenticator - Two Factor Authentication (2FA) : Minor changes.
693
-
694
- = 5.1.0 =
695
- * Google Authenticator - Two Factor Authentication (2FA) : Added new user plans
696
-
697
- = 5.0.17 =
698
- * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix.
699
-
700
- = 5.0.16 =
701
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes.
702
-
703
- = 5.0.15 =
704
- * Google Authenticator - Two Factor Authentication (2FA) : Added Google Authenticator option in the WP login page itself.
705
-
706
- = 5.0.14 =
707
- * Google Authenticator - Two Factor Authentication (2FA) : Bug Fixes.
708
-
709
- = 5.0.13 =
710
- * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix and code optimization.
711
-
712
- = 5.0.12 =
713
- * Google Authenticator - Two Factor Authentication (2FA) : Added GDPR Compliance.
714
-
715
- = 5.0.11 =
716
- * Google Authenticator - Two Factor Authentication (2FA) : Readme Update.
717
-
718
- = 5.0.10 =
719
- * Google Authenticator - Two Factor Authentication (2FA) : Added Proxy Setup feature.
720
-
721
- = 5.0.9 =
722
- * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for "The loopback request to your site failed." error.
723
-
724
- = 5.0.8 =
725
- * Google Authenticator - Two Factor Authentication (2FA) : Changes for 2FA Free plugin for 1 user forever.
726
-
727
- = 5.0.7 =
728
- * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for User Registration and other plugin conflicts in Dashboard.
729
-
730
- = 5.0.6 =
731
- * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for existing customers who upgraded from 4.5.x version to versions between 5.0.0 and 5.0.4 and are facing issues with the Account Setup Tab.
732
-
733
- = 5.0.5 =
734
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for user entry during plugin update.
735
-
736
- = 5.0.4 =
737
- * Google Authenticator - Two Factor Authentication (2FA) : Workaround for errors during sending of OTP during registration.
738
-
739
- = 5.0.3 =
740
- * Google Authenticator - Two Factor Authentication (2FA) : Minor fix for removing warings.
741
-
742
- = 5.0.2 =
743
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
744
-
745
- = 5.0.1 =
746
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
747
-
748
- = 5.0.0 =
749
- * Google Authenticator - Two Factor Authentication (2FA) : New UI Interface, 2-factor authentication for Unlimited Users.
750
- * This is a major release.
751
-
752
- = 4.6.2 =
753
- * Google Authenticator - Two Factor Authentication (2FA) : Plugin registration fixes and minor warning fixes.
754
-
755
- = 4.6.1 =
756
- * Google Authenticator - Two Factor Authentication (2FA) : Login error fix. Please skip version 4.5.9 and update to version 4.6.1
757
-
758
- = 4.5.9 =
759
- * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes for customers who were getting redirected to the login page after the two factor authentication.
760
-
761
- = 4.5.8 =
762
- * Google Authenticator - Two Factor Authentication (2FA) : Tested up to 4.9.4 and Removed External links.
763
-
764
- = 4.5.7 =
765
- * Google Authenticator - Two Factor Authentication (2FA) : Minor bug fixes.
766
-
767
- = 4.5.6 =
768
- * Google Authenticator - Two Factor Authentication (2FA) : Tested up to Wordpress 4.9.
769
-
770
- = 4.5.5 =
771
- * Google Authenticator - Two Factor Authentication (2FA) : 404 bug fixes.
772
-
773
- = 4.5.4 =
774
- * Google Authenticator - Two Factor Authentication (2FA) : Better UI of Login Pages, Fixed Redirection issue. Fixed the error in the last version (4.5.3) for the customers who were getting undefined action errors.
775
-
776
- = 4.5.3 =
777
- * Google Authenticator - Two Factor Authentication (2FA) : Changed UI of the Login Pages, Redirect to Login Page bug fixes.
778
-
779
- = 4.5.2 =
780
- * Google Authenticator - Two Factor Authentication (2FA) : Readme Update: Description Update
781
-
782
- = 4.5.1 =
783
- * Google Authenticator - Two Factor Authentication (2FA) : Updated the new Google Authenticator App's link and the 'How to Setup Tab' tab.
784
-
785
- = 4.5.0 =
786
- * Google Authenticator - Two Factor Authentication (2FA) : Fix Google Authenticator configuration issue.
787
-
788
- = 4.4.9 =
789
- * Google Authenticator - Two Factor Authentication (2FA) : Added Alert Message for SMS Transactions only when authentication method is OTP over SMS.
790
-
791
- = 4.4.8 =
792
- * Google Authenticator - Two Factor Authentication (2FA) : Added Alert Message for SMS Transactions. Fixed Remember Device flow and confliction with themes. Added support for multiple instances of wordpress.
793
-
794
- = 4.4.7 =
795
- * Google Authenticator - Two Factor Authentication (2FA) : Updated the error message for 2 factor configuration.
796
-
797
- = 4.4.6 =
798
- * Google Authenticator - Two Factor Authentication (2FA) : Instructions for login in case user get locked out.
799
-
800
- = 4.4.5 =
801
- * Google Authenticator - Two Factor Authentication (2FA) : Fixed the issue of session variable on the login with username page.
802
-
803
- = 4.4.4 =
804
- * Google Authenticator - Two Factor Authentication (2FA) : Added alert messages for OTP over SMS usages.
805
-
806
- = 4.4.3 =
807
- * Google Authenticator - Two Factor Authentication (2FA) : Fixed the login flow for third party Apps that supports XML-RPC.
808
-
809
- = 4.4 =
810
- * Google Authenticator - Two Factor Authentication (2FA):
811
- * Note: This is a very important update having altogether a new UI and compatibility with Limit Login Attempts. After updating, please do not logout from your admin dashboard. Try to login from another browser and if you face any issue , please contact us at info@xecurify.com
812
- * Compatibility with Limit Login Attempts.
813
- * New User Interface for login.
814
-
815
- = 4.3.2 =
816
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Revised licensing cost for users.
817
-
818
- = 4.3.1 =
819
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Compatible upto 4.7
820
-
821
- = 4.3.0 =
822
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Updated miniOrange APIs.
823
-
824
- = 4.2.9 =
825
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Tested up to WordPress 4.6.
826
-
827
- = 4.2.7 =
828
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Session Warning fix in the last version for some of the users.
829
-
830
- = 4.2.6 =
831
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Compatible with wordpress caching.
832
-
833
- = 4.2.5 =
834
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Improved the session handler.
835
-
836
- = 4.2.4 =
837
- * Google Authenticator - Two Factor Authentication (2FA, MFA): Updated faq for limit login attempt type of plugins.
838
-
839
- = 4.2.3 =
840
- * Google Authenticator - Two Factor Authentication ( 2FA ):
841
- * Improved Error handling during Account Creation.
842
-
843
- = 4.2.2 =
844
- * Google Authenticator - Two Factor Authentication ( 2FA ):
845
- * Registration Flow fixes
846
-
847
- = 4.2.1 =
848
- * Google Authenticator - Two Factor Authentication ( 2FA ):
849
- * Change of status during login with phone flow and tested with WP 4.5
850
-
851
- = 4.2.0 =
852
- * Google Authenticator - Two Factor Authentication ( 2FA ):
853
- * Mark as tested on Wordpress 4.5
854
-
855
- = 4.1.8 =
856
- * Google Authenticator - Two Factor Authentication ( 2FA ):
857
- * Changed the location of images used for the demo. Now being loaded from the site having SSL certificate.
858
-
859
- = 4.1.7 =
860
- * Google Authenticator - Two Factor Authentication ( 2FA ):
861
- * Improved Error Handling for Remember Device.
862
-
863
- = 4.1.6 =
864
- * Google Authenticator - Two Factor Authentication ( 2 Factor ):
865
- * Licensing Plan Updated.
866
-
867
- = 4.1.5 =
868
- * Google Authenticator - Two Factor Authentication ( 2FA ):
869
- * Added Forgot Password functionality for miniOrange customer admin.
870
- * Added warning message for the users who are using lower version of php.
871
- * Added functionality to change the customer email.
872
-
873
- = 4.1.4 =
874
- * Google Authenticator - Two Factor Authentication ( 2FA ):
875
- * Added an option for admin to enable or disable login for XML-RPC supported applications.
876
-
877
- = 4.1.3 =
878
- * Google Authenticator - Two Factor Authentication ( 2FA ):
879
- * Fixed CSS Conflict with the plugins in the admin dashboard.
880
- * More intuitive UI for WooCommerce login.
881
- * Tested front-end login with themes like wordpress default theme,
882
- customize theme,zerif-lite theme,accesspress store theme,ishop theme and many more.
883
-
884
- = 4.1.2 =
885
- * Google Authenticator - Two Factor Authentication ( 2FA ): Google Authenticator for Windows phone
886
- * Fixed CSS conflict with front-end of site if WooCommerce is not enabled.
887
-
888
- = 4.1.1 =
889
- * Google Authenticator - Two Factor Authentication ( 2FA ): Adding Validation in choosing Security Questions (KBA).
890
-
891
- = 4.1.0 =
892
- * Google Authenticator - Two Factor Authentication ( 2FA ): Features added.
893
- multisite support
894
- Custom login redirection
895
- Authy 2-Factor Authentication as separate authentication method
896
-
897
- = 4.0.6 = Google Authenticator - Two Factor Authentication Added multisite support and custom redirection after login feature.
898
-
899
- = 4.0.5 = Google Authenticator - Two Factor Authentication Login into third party apps which support XML-RPC.
900
-
901
- = 4.0.4 = Google Authenticator - Two Factor Authentication Added a check of KBA configuration from mobile login.
902
-
903
- = 4.0.3 = Google Authenticator - Two Factor Authentication Added Support for Authy 2-Factor Authentication App.
904
-
905
- = 4.0.2 = Google Authenticator - Two Factor Authentication Added a check for selection of unique questions during KBA setup .
906
-
907
- = 4.0.1 = Bug Fix Google Authenticator - 2 Factor
908
-
909
- = 4.0 =
910
- * Google Authenticator - Two Factor Authentication ( 2FA ): Features added.
911
- * KBA as backup method.
912
- * mobile browser support.
913
- * more intuitive UI for WooCommerce login.
914
-
915
- = 3.8 =
916
- * Google Authenticator - Two Factor Authentication ( 2 Factor ): Bug Fix for roles.
917
-
918
- = 3.7 =
919
- * Google Authenticator - Two Factor Authentication ( 2FA ): Activation of two factor role wise.
920
-
921
- = 3.6 =
922
- * Google Authenticator - Two Factor Authentication ( 2FA ): email verification in inline registration flow for all users.
923
- More descriptive setup messages and UI changes.
924
-
925
- = 3.5 =
926
- * Google Authenticator - Two Factor Authentication ( 2FA ): Provided mobile login support.
927
-
928
- = 3.4 =
929
- * Google Authenticator - Two Factor Authentication ( 2FA ): Features added
930
- * Inline registration flow for users.
931
- * Security Questions (KBA) as additional method
932
- * Alternate way of user identification in customer creation.
933
- * premium customizable features.
934
-
935
- = 3.3 =
936
- * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the issue of session for some versions of php.
937
-
938
- = 3.2 =
939
- * Google Authenticator - Two Factor Authentication ( 2FA ): Fix for device-id compatibility.
940
-
941
- = 3.1 =
942
- * Google Authenticator - Two Factor Authentication ( 2 Factor ): Fix for 2FA ShortCode.
943
-
944
- = 3.0 =
945
- * Google Authenticator - Two Factor Authentication ( 2FA ): Features added
946
- * Google Authenticator.
947
- * Device Id (Remember device).
948
- * Choice given to admin to enable specific authentication methods for users.
949
- * Two Factor support for WooCommerce theme.
950
- * Short Code for various customized fronted login.
951
- * More intuitive UI and descriptive instructions.
952
-
953
- = 2.6 =
954
- * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the compatibility issues of user session with other security plugins.
955
-
956
- = 2.5 =
957
- * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the compatibility issues with All In One WP Security & Firewall plugin.
958
-
959
- = 2.4 =
960
- * Google Authenticator - Two Factor Authentication ( 2FA ): UI fixes for admin media library dashboard.
961
-
962
- = 2.3 =
963
- * Google Authenticator - Two Factor Authentication ( 2FA ): More descriptive setup messages, more intuitive UI.
964
-
965
- = 2.2 =
966
- * Google Authenticator - Two Factor Authentication ( 2FA ): Fixed css issues for existing users
967
-
968
- = 2.1 =
969
- * Google Authenticator - Two Factor Authentication ( 2FA ): Added support for multiple Two Factor Choices like OTP Over SMS, Phone Call Verification, Push Notification, Soft Token (like Google Authenticator Code), Email Verification, etc.
970
-
971
- = 2.0 =
972
- * Google Authenticator - Two Factor Authentication ( 2FA ): Added login with password plus second factor feature.
973
-
974
- = 1.8 =
975
- * Google Authenticator - Two Factor Authentication ( 2FA ): Added feature of different login form choice,test authentication and help for configuration and setup.
976
-
977
- = 1.7 =
978
- * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Modifying login screen adaptable to user's login form
979
-
980
- = 1.6 =
981
- * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): fetching 2 factor configuration when activating the plugin after deactivating it.
982
-
983
- = 1.5 =
984
- * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Login issues and password save issues resolved
985
-
986
- = 1.4 =
987
- * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Authentication was not working on some version of php.
988
-
989
- = 1.3 =
990
- * Google Authenticator - Two Factor Authentication Bug Fixes
991
-
992
- = 1.2 =
993
- * Google Authenticator - Two Factor Authentication ( 2FA ): Added 2 factor for all users along with forgot phone functionality.
994
-
995
- = 1.1 =
996
- * Google Authenticator - Two Factor Authentication ( 2FA ): Added email ID verification during registration.
997
-
998
- = 1.0.0 =
 
 
 
 
999
  * First version of Google Authenticator - Two Factor Authentication ( 2FA ) plugin supported with mobile authentication for admins only.
1
+ === miniOrange's Google Authenticator - WordPress Two Factor Authentication (2FA , Two Factor, OTP SMS and Email) | Passwordless login ===
2
+
3
+ Contributors: twofactor, twofactorauthentication, hsn97,cyberlord92
4
+ Tags: google authenticator,two factor,two factor authentication, OTP Authentication, 2FA , wp 2fa, 2-factor authentication, multi factor authentication , MFA ,two step verification, TFA, mobile verification, MFA, Remember Device, OTP Over Telegram, Mobile Authentication, 2 step authentication, passwordless login, QR Code Authentication, email verification, KBA, Security Questions, login with SMS, Authy, Authy two factor , FIDO, FIDO2, Webauthn, multi factor, wordfence, IP Blocking, IP Whitelisting, SMS login, OTP Over SMS and Email, login without password, Mobile verification, password free authentication, session restriction.
5
+ Donate link: https://miniorange.com/
6
+ Requires at least: 3.0.1
7
+ Tested up to: 6.0
8
+ Requires PHP: 5.3.0
9
+ Stable tag: 5.5.76
10
+ License: GPLv2 or later
11
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
+
13
+ Google Authenticator-multi Factor(WP 2FA / OTP) - Supports TOTP/OTP Login based methods like Duo/Google Authenticator along with OTP Over SMS/Email & more.
14
+
15
+ == Description ==
16
+
17
+ **Google Authenticator - Two Factor (WP 2FA / OTP)** - Provides *secure login* to WordPress. This plugin can be configured for any **TOTP-based/OTP Login** methods like Duo/Microsoft/Google Authenticator. It supports OTP login based 2fa methods.
18
+
19
+ You can check out following video to configure google authenticator as a two factor:
20
+
21
+ [youtube https://youtu.be/_nkMCkxLcIs]
22
+
23
+ = Trial for Google authenticator Premium and Enterprise plugin =
24
+ We do provide 7 days trial of our Google Authenticator Premium plugins. You can test all Premium features including 2fa methods/OTP authentication methods such as google authenticator, OTP Over SMS/Email.
25
+
26
+ = [Google Authenticator - Two step verification/ 2 Factor Authentication/ WP 2FA] FREE Plugin Features =
27
+ * Simplified & easy user interface to set up **Google Authenticator** and other Two-Factor Authentication ( WP 2FA/TFA/OTP ) methods.
28
+ * **3 Users** forever FREE!
29
+ * QR Code authentication, Push Notification, Soft Token and Security Questions(KBA) are supported in the plugin for multi factor authentication(WP 2FA/TFA).
30
+ * Includes Language Translation Support
31
+ * **[User Profile 2fa](https://plugins.miniorange.com/how-to-set-up-2-factor-from-wordpress-user-profile-section):** Administrators can set up Two Factor (TFA)of users via WordPress users section
32
+ * **Multi Factor Authentication(MFA):** This feature can be used to invoke any two factor method on login among multiple methods which were configured. You can configure multiple TOTP/OTP Login based 2fa methods that can be used as a **backup 2fa method**
33
+ * **Two-Factor Authentication** ( TFA/2FA ) for Ajax login forms like User Pro, login with ajax, Theme my login, etc with all authentication methods.
34
+ * **Passwordless login** and login with phone number
35
+ * **[Prevent account sharing](https://security.miniorange.com/restricting-users-from-sharing-their-login-credentials/):** Google Authenticator(WP 2FA) is OTP login based method which restricts users from sharing WordPress login credentials which help to secure WordPress Websites. The Google authenticator plugin also adds a session control feature that limits user sessions based on WordPress User activities.
36
+ * This plugin Supports standard TOTP
37
+ * Two-Factor Authentication (WP 2FA/TFA) allows authentication on the login page itself for Google Authenticator & miniOrange Soft Token
38
+ * **[Multiple Login Options](https://docs.miniorange.com/documentation/login-username-2nd-factor-2):** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login /Login without password /Password free authentication
39
+ * Recovery codes in case you are locked out for all Two-Factor Authentication (WP 2FA/TFA)
40
+ * **Mobile verification - two step verification** (WP 2FA/TFA) using a user's mobile phone with authentication method like google authenticator, QR code authentication, etc.
41
+
42
+ = Additional Features other than the basic Google Authenticator two-factor authentication =
43
+
44
+ * Complete Web Security suite to protect wordpress from any attacks
45
+ * Web Application Firewall (WAF): Wordpress Firewall to protect your site
46
+ * OWASP TOP 10 Protection
47
+ * Login Protection: Spam and Login Protection
48
+ * Malware scanner: Detects any virus, malware and trojan
49
+ * Backup: Taking Encrypted Backup with local storage and cloud storage
50
+ * Limit Login Attempts to stop password guessing
51
+ * Realtime Global IP Blocking
52
+ * Limit Rate of Request: Protecting resources from any security hole exploit
53
+ * Crawler Detection and blocking
54
+ * Blocking IP and Attacks
55
+ * Country Blocking and Browser Blocking
56
+ * Brute Force Attacks prevention to stop password hack
57
+ * Captcha for Bot Detection
58
+ * Google Recaptcha
59
+ * Login Form Protection
60
+ * Registration Form Protection
61
+ * Integration with different plugin - WooCommerce, Buddypress, Ultimate Member and others
62
+ * Reporting
63
+ * Audit Log
64
+
65
+ = Apps Supported by the two-factor authentication (2FA / MFA) plugin =
66
+ * Google Authenticator
67
+ * miniOrange Authenticator
68
+ * Duo Authenticator
69
+ * Microsoft Authenticator
70
+ * Authy 2 Factor Authenticator
71
+ * LastPass Authenticator
72
+ * FreeOTP Authenticator
73
+
74
+ = User Identity Verification or multi-factor authentication with Google Authenticator =
75
+ **Login and Registration:** Verify users on login with different OTP Login methods & other two factor methods like OTP over SMS, OTP Over Email, OTP Over Telegram, Google Authenticator, SMS Verification, Email, Authy Authenticator, Duo Authenticator, Microsoft Authenticator, TOTP Based Authenticator, Security Questions, and many others.
76
+ Users will receive an OTP at the time of registration which will be used to verify their identity. OTP authentication can be done either via OTP Login methods(OTP Over email or via OTP over SMS).
77
+
78
+ = Plugin Integrations and Support for all methods of two-factor authentication/two step verification ( WP 2FA/TFA/OTP Authentication ) =
79
+ Our plugin is integrated with [popular Plugins](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa#integrations) such as WooCommerce and Ultimate member.
80
+
81
+ = Third Party Custom SMS Gateway for OTP Over SMS ( OTP Login/two-factor authentication / 2FA ) =
82
+ The premium plugin supports any third-party **custom SMS Gateway**. If you don't have your SMS gateway you can use miniOrange gateway and send SMS(OTP over SMS) all over the world for OTP authentication.
83
+ [Here](https://plugins.miniorange.com/supported-sms-email-gateways) are some famous gateways supported for two factor (WP 2FA/TFA/OTP).
84
+ [Test your Gateway](https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig)
85
+
86
+ = Why do you need to register for Google Authenticator? =
87
+
88
+ **Google authenticator** uses miniOrange APIs to communicate between your WP and miniOrange. To keep this communication secure, we ask you to register and assign API keys specific to your account. This way your account and users' calls can be only accessed by API keys assigned to you.
89
+ Adding to this, you can also use the same account on multiple applications and your users do not have to maintain multiple accounts or WordPress 2FA like Google Authenticator if you are using our cloud solution. Single code generated in Google Authenticator will be enough to log in to all sites. With this, you can also achieve sync of **two-factor authentication on multiple sites**.
90
+
91
+ = Google Authenticator ( WP 2FA - two-factor authentication ) Premium Lite Plugin Features =
92
+
93
+ * Google Authenticator - Two-Factor Authentication (WP 2FA/TFA) for all users and all user roles *( Site-based pricing )*
94
+ * **Two-Factor Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Authentication( OTP Over Email & OTP Over SMS), Email Verification, Mobile Verification *( SMS credits need to be purchased as per the need)*
95
+ * **[Multiple Login Options](https://docs.miniorange.com/documentation/login-username-2nd-factor-2):** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login /Login without password /Password free authentication. With google authenticator plugin, the 2FA plugin user is authenticated directly with the second layer of security without entering the password. You can opt between a password and 2FA or only a second factor.
96
+ * **Unlimited Email transactions:** miniOrange's google authenticator plugin provides unlimited Email transactions with your SMTP server
97
+ * **Backup Method:** KBA(Security Questions), OTP Over Email, Backup codes if you are unable to validate two step verification
98
+ * [User role based redirection after Login](https://docs.miniorange.com/documentation/custom-redirect-login-url)
99
+ * [Customize account name in Google Authenticator app](https://docs.miniorange.com/documentation/google-authenticator-app-name)
100
+ * [Custom Security Questions (KBA)](https://docs.miniorange.com/documentation/custom-security-questions)
101
+ * [Role based 2 Factor](https://docs.miniorange.com/documentation/specific-set-authentication-methods-based-role)
102
+ * [Force Two factor for users](https://docs.miniorange.com/documentation/enforce-2fa-users)
103
+ * [Email notification to users asking them to set up Two-Factor Authentication (WP 2FA/TFA)](https://docs.miniorange.com/documentation/want-send-email-notification-users-setting-2-factor)
104
+ * [Set Privacy Policy for users](https://docs.miniorange.com/documentation/privacy-policy-site)
105
+ * [Remember Device to skip 2fa](https://docs.miniorange.com/documentation/remember-my-device)
106
+ * **Customizable Login UI Popup:** Using google authenticator plugin you can customize the user interface of the login popup as per your preference.
107
+
108
+ = Google Authenticator ( WP 2FA / OTP ) Enterprise Plugin Features =
109
+
110
+ * [Google Authenticator - Two-Factor Authentication](https://plugins.miniorange.com/2-factor-authentication-for-wordpress) - 2FA for Users as per the upgrade *( User-based pricing )*
111
+ * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Authentication(OTP Over Email, OTP Over SMS or OTP Over SMS and Email), Email Verification, Hardware Token. *( SMS and Email credits need to be purchased for successful OTP authentication as per the need)*
112
+ * **Multiple Login Options:** Username + password + two-factor Authentication (or) Username + two-factor authentication(2FA) i.e. Passwordless login /Login without password /Password free authentication.
113
+ * **Backup Methods:** KBA(Security Questions), OTP Over Email, Backup Codes
114
+ * **[Sync 2fa for multiple websites](https://plugins.miniorange.com/two-factor-authentication-2fa-for-multiple-wordpress-websites)**
115
+ * **Multisite compatible** for all WordPress 2FA methods.
116
+ * Email notification to users asking them to set up Google Authenticator - Two-Factor Authentication (WP 2FA/TFA).
117
+ * User **role based redirection** after Login, Custom Security Questions (KBA), Customize account name in Google Authenticator app.
118
+ * Enable Two-Factor Authentication (WP 2FA/OTP) for specific Users/User Roles
119
+ * Choose specific two-factor authentication methods for Users
120
+ * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
121
+ * **Brute force attack prevention, IP Blocking & User login Monitoring**
122
+ * File protection & strong password
123
+ * Monitoring current Google Authenticator and other two-factor authentication (2 Factor) method of all the users in the plugin
124
+ * Session restriction
125
+
126
+ = Add Ons for two-factor authentication ( WP 2FA / OTP ) =
127
+
128
+ * RBA & Trusted Devices Management Add-on Features for two-factor authentication ( WP 2FA/OTP Login )
129
+ * **Remember Device** to skip the two-factor authentication ( 2 Factor ) from the **trusted devices**.
130
+ * Set **Device Limit** for the users to login
131
+
132
+ * Personalization Add-on Features to customize your two-factor authentication/OTP Authentication pages
133
+ * Custom UI of Two-Factor Authentication (WP 2FA/TFA) pop-ups
134
+ * Custom Email and SMS Templates
135
+ * Customize 'Powered by' Logo on wp 2fa authentication page
136
+ * Customize Plugin Icon
137
+ * Customize Plugin Name
138
+
139
+ * Short Codes Add-on Features for two-factor authentication ( 2FA / MFA )
140
+ * Turn on/off 2 factor (two-factor authentication) by user
141
+ * Reconfigure 2fa methods
142
+ * 'Enable Remember Device' from a custom login form to skip 2 factor for trusted devices.
143
+ * On-Demand ShortCodes for specific functionalities ( like for enabling WordPress 2FA (Two-Factor authentication) for specific pages)
144
+
145
+ * [Device restriction with webauthn/ FIDO2](https://plugins.miniorange.com/passwordless-login-with-web-authentication-wordpress)
146
+ Password free authentication is possible with WebAuthn.
147
+
148
+ Check all the features other than two-factor authentication ( Two step verification/OTP authentication ) here: [miniOrange Website](https://security.miniorange.com/)
149
+
150
+ <h4>Useful blog posts about two-factor authentication ( 2FA / MFA ) plugin </h4>
151
+ * [Beginner’s Guide: How to Add Two-Factor Authentication to WordPress](https://themeisle.com/blog/how-to-add-two-factor-authentication-to-wordpress/)
152
+ * [How to Add WordPress Two-Factor Authentication (WP 2FA/TFA)](https://phppot.com/wordpress/how-to-add-wordpress-two-factor-authentication-2fa-using-google-authenticator-plugin/)
153
+ * [How to translate WordPress Two-Factor Authentication (WP 2FA/TFA)](https://plugins.miniorange.com/the-plugin-translate-spanish-language-with-2-factor-wordpress)
154
+
155
+ Customized solutions and Active support are available. Email us at info@xecurify.com or call us at +1 9786589387.
156
+
157
+ **Note: The plugin is GDPR Compliant and supports a wide variety of Language Translation**
158
+
159
+ == Installation ==
160
+
161
+ = From your WordPress dashboard =
162
+ 1. Navigate to `Plugins > Add New` from your WP Admin dashboard.
163
+ 2. Search for `miniOrange 2 Factor Authentication (2FA)`or `Google Authenticator.`
164
+ 3. Install `miniOrange 2 Factor Authentication (2FA)` and activate the plugin.
165
+
166
+ = From WordPress.org =
167
+ 1. Search for `miniOrange 2 Factor Authentication (2FA)` and download it.
168
+ 2. Unzip and upload the `miniorange-2-factor-authentication (2FA)` directory to your `/wp-content/plugins/` directory.
169
+ 3. Activate miniOrange 2 Factor Authentication (2FA) from the Plugins tab of your admin dashboard.
170
+
171
+ = Once Activated [Google Authenticator - Two Step Verification]=
172
+ 1. Select miniOrange 2-Factor ( 2 factor authentication ) from the left menu and follow the instructions.
173
+ 2. Configure any 2 factor method, say Google Authenticator.
174
+ 2. Once, you complete your setup. Click on the Log Out button.
175
+ 3. Enter the username and password. After the initial validation, you will be prompted for the 2-factor method you had set up.
176
+ 4. Validate yourself with the 2-factor authentication(WP 2FA/TFA) method you configured.
177
+
178
+ **Video Guide** :
179
+ [youtube https://youtu.be/_nkMCkxLcIs]
180
+
181
+ == Frequently Asked Questions ==
182
+
183
+ = How do I gain access to my website if I get locked out using the Google Authenticator? =
184
+
185
+ You can obtain access to your website by one of the below options:
186
+
187
+ 1. If you have an additional administrator account whose Two Factor (2FA) is not enabled yet, you can login with it.
188
+ 2. If you had set up KBA questions earlier, you can use them as an alternate method to login to your website instead of 2FA.
189
+ 3. Rename the plugin from FTP - this disables the Google Authenticator (WP 2FA/TFA) plugin and you will be able to login with your WordPress username and password.
190
+
191
+ For detailed information, Please check on our website. <a href="https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/" target="_blank">Locked Out</a>.<br>
192
+ You can also check our video Tutorial:
193
+ [youtube https://www.youtube.com/watch?v=wLFKakQkpk8]
194
+
195
+ = I want to enable Google Authenticator 2 Factor authentication (2FA) as the backup method? =
196
+
197
+ You can use google authenticator as the backup method for your specific user or all users in the premium version of the two-factor authentication. [PREMIUM FEATURE]
198
+
199
+ = I have enabled Two-Factor Authentication (2FA / TFA) for all users, what happens if an end-user tries to login but has not yet registered? =
200
+
201
+ If a user has not set up Two-Factor yet, the user has to register by inline registration that will be invoked during the login.
202
+
203
+ = I want to enable only one authentication method for my users. What should I do? =
204
+
205
+ You can select the two-factor authentication methods under the Login Settings tab. The selected authentication methods will be shown to the user during inline registration for example if you select Google Authenticator it will be shown on login. [PREMIUM FEATURE]
206
+
207
+ = I have a custom/front-end login page on my site and I want the look and feel to remain the same when I add 2 factor ? =
208
+
209
+ If you have a custom login form other than wp-login.php then we will provide you the shortcode. Shortcode will work only for the customized login page created from WordPress plugins. We are not claiming that it will work with all the customized login pages. In such a case, custom work is needed to integrate two factor with your customized login page. You can submit a query in our <b>Support Section</b> in the plugin or you can contact us at info@xecurify.com for more details.
210
+
211
+ = I have installed plugins that limit the login attempts like Limit Login Attempt, Loginizer, Wordfence, etc. Are there any incompatibilities with these kinds of plugins? =
212
+
213
+ The limit login attempt kind of plugins limit the number of login attempts and block the IP temporarily. So if you are using 2 factor(WP 2fa/TFA) along with these kinds of plugins then you should increase the login attempts (minimum 5) so that you don't get locked out yourself.
214
+
215
+ = If you are using any Security Plugin in WordPress like Simple Security Firewall, All in One WP Security Plugin and you are not able to login with Two-Factor. =
216
+
217
+ Our Two-Factor plugin is compatible with most of the security plugins, but if it is not working for you. Please submit a query in our Support Section in the plugin or you can contact us at info@xecurify.com.
218
+
219
+ = If you are using any render-blocking javascript and CSS plugin like Async JS and CSS Plugin and you are not able to login with Two-Factor or your screen got blank. =
220
+
221
+ If you are using Async JS and CSS Plugin. Please go to its settings and add jquery to the list of exceptions and save settings. It will work. If you are still not able to get it right, Please submit a query in our Support Section in the plugin or you can contact us at info@xecurify.com.
222
+
223
+ = My phone has no internet connectivity and I am entering the one time passcode from miniOrange Authenticator App during OTP login, it says Invalid OTP?
224
+
225
+ Click on the <b>Settings Icon</b> on top right corner in <b>miniOrange Authenticator App</b> and then press <b>Sync button</b> under 'Time correction for codes' to sync your time with miniOrange Servers. If you still can't logged in then please email us at info@xecurify.com or <a href="https://miniorange.com/contact" target="_blank">Contact us</a>.Soft Token method is just like google authenticator method.
226
+
227
+ = I am upgrading my phone. =
228
+
229
+ You should go to <b>Setup Two Factor (2FA) </b> Tab and click on <b>Reconfigure</b> to reconfigure 2-Factor with your new phone.
230
+
231
+ == Screenshots ==
232
+
233
+ 1. Google Authenticator (WP 2FA/OTP) - Setup different 2 Factor methods
234
+ 2. Google Authenticator (WP 2FA/OTP) - Test 2 factor configured
235
+ 3. Google Authenticator (WP 2FA/OTP) - 2 Factor Authentication (2FA) methods available
236
+ 4. Google Authenticator (WP 2FA/OTP) - Google Authenticator login
237
+ 5. Google Authenticator (WP 2FA/OTP) - QR code 2 Factor (2FA) login
238
+ 6. Google Authenticator (WP 2FA/OTP) - miniOrange Authenticator login
239
+ 7. Google Authenticator (WP 2FA/OTP) - Push notification login
240
+ 8. Google Authenticator (WP 2FA/OTP) - Remember device and personalization add-ons
241
+
242
+ == Changelog ==
243
+
244
+ = 5.5.76 =
245
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
246
+ * Bug Fixes and Code Improvements
247
+
248
+ = 5.5.75 =
249
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
250
+ * Bug Fixes and Code Improvements
251
+
252
+ = 5.5.7 =
253
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
254
+ * Bug Fixes and Code Improvements
255
+
256
+ = 5.5.6 =
257
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
258
+ * Bug Fixes
259
+
260
+ = 5.5.5 =
261
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
262
+ * Compatibility with Wordpress v6.0
263
+ * Added SMS transactions link
264
+
265
+ = 5.5.4 =
266
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
267
+ * Minor Bug fix
268
+
269
+ = 5.5.3 =
270
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
271
+ * UI fixes for non-admin users
272
+
273
+ = 5.5.2 =
274
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
275
+ * Updated Plugin UI
276
+
277
+ = 5.5.1 =
278
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
279
+ * Updated Pricing page UI
280
+
281
+ = 5.5 =
282
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
283
+ * Updated Network Security UI
284
+
285
+ For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/changelog.txt) provided with the plugin.
286
+
287
+ == Upgrade Notice ==
288
+
289
+ = 5.5.7 =
290
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
291
+ * Bug Fixes and Code Improvements
292
+
293
+ = 5.5.1 =
294
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
295
+ * Updated Pricing page UI
296
+
297
+ = 5.5 =
298
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
299
+ * Updated Network Security UI
300
+
301
+ = 5.4.52 =
302
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
303
+ * Updated Trial Request Form
304
+
305
+ = 5.4.51 =
306
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
307
+ * Trial notification visibility issue fixed
308
+
309
+ = 5.4.50 =
310
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
311
+ * Bug fix - Headers already sent
312
+
313
+ = 5.4.49 =
314
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
315
+ * Trial Notification for Premium Plugins
316
+ * CSRF Fix
317
+
318
+ = 5.4.48 =
319
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
320
+ * Close button on offer banner
321
+
322
+ = 5.4.47 =
323
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
324
+ * Christmas offer
325
+
326
+ = 5.4.46 =
327
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
328
+ * Black friday offer
329
+ * Get email notification on the plugin's new release
330
+
331
+ = 5.4.45 =
332
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
333
+ * Added login with the any configured methods
334
+ * Minor bug fix
335
+
336
+ = 5.4.44 =
337
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
338
+ * Added link to WordPress forum in support form
339
+ * Minor bug fix
340
+
341
+ = 5.4.43 =
342
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
343
+ * Special offer - Special discount for limited time
344
+
345
+ = 5.4.42 =
346
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
347
+ * Backup Code as a cloud service
348
+
349
+ = 5.4.41 =
350
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
351
+ * Minor UI Changes and Bug Fixes
352
+
353
+ = 5.4.40 =
354
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
355
+ * XSS Vulnerability fix
356
+ * Added video link for miniOrange Authenticator
357
+
358
+ = 5.4.39 =
359
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
360
+ * Added 2FA setup using user profile option
361
+ * Support Form UI
362
+ * 2FA Form support for login with ajax, Elementor Pro, UserPro login forms
363
+ * Minor bug fixes
364
+
365
+ = 5.4.38 =
366
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
367
+ * Added 2FA setup using user profile option
368
+ * Setup Wizard for configuring 2FA
369
+ * 2FA Form support for login with ajax, Elementor Pro, UserPro login forms
370
+ * Minor bug fixes
371
+
372
+ = 5.4.37 =
373
+ * Google Authenticator - Two factor Authentication (2FA, OTP) :
374
+ * Minor bug fixes
375
+
376
+ = 5.4.36 =
377
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
378
+ * Remove extra comma
379
+
380
+ = 5.4.35 =
381
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
382
+ * Minor bug fixes
383
+
384
+ = 5.4.34 =
385
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
386
+ * New User Interface for easy setup
387
+ * Added developers logs
388
+ * Minor fixes
389
+
390
+ = 5.4.33 =
391
+ * Google Authenticator – Two Factor Authentication (2FA, TFA) :
392
+ * New pricing page for two factor authentication
393
+ * Added Duo Authenticator push notification method.
394
+ * WooCommerce redirect issue fix.
395
+
396
+ = 5.4.32 =
397
+ * Google Authenticator Two Factor Authentication (2FA, TFA) :
398
+ * Replaced sessions with transient.
399
+
400
+ = 5.4.31 =
401
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
402
+ * OTP over Email as two factor fix
403
+ * Low Email transaction alert fix
404
+
405
+ = 5.4.30 =
406
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
407
+ * Feedback changes
408
+
409
+ = 5.4.29 =
410
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
411
+ * Session independent Google Authenticator
412
+ * Session independent KBA
413
+ * Feedback improvement for two factor authentication plugin
414
+
415
+ = 5.4.28 =
416
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
417
+ * New year sale update
418
+
419
+ = 5.4.27 =
420
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
421
+ * New year sale
422
+ * WordPress 5.6 compatibility fix
423
+ * WAF fixes
424
+ * Real time IP blocking
425
+ * IP based user login
426
+ * New feature release notification
427
+
428
+ = 5.4.26 =
429
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
430
+ * Christmas Offer
431
+
432
+ = 5.4.25 =
433
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
434
+ * OTP over Telegram Fixes
435
+
436
+ = 5.4.24 =
437
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
438
+ * OTP over Whatsapp
439
+ * OTP over Telegram
440
+ * Feedback form changes
441
+
442
+ = 5.4.23 =
443
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
444
+ * Call support with technical team
445
+ * Email and SMS transaction sync
446
+ * Feedback form on network deactivate
447
+ * Enable/Disable 2FA fix
448
+ * 2FA added for super admin role
449
+
450
+ = 5.4.22 =
451
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
452
+ * Backup Codes
453
+ * Sanitization and JS improvements
454
+ * SMS and Email Sync
455
+ * Whatsapp based Two factor in Premium plugin
456
+ * Telegram based Two factor in Premium plugin
457
+
458
+ = 5.4.21 =
459
+ * Google Authenticator - Two Factor Authentication (2FA, SMS) :
460
+ * Sanitization of some input values.
461
+
462
+ = 5.4.20 =
463
+ * Google Authenticator - Two Factor Authentication (2FA, SMS) :
464
+ * Google Authenticator Qr code fix.
465
+ * My theme login Login fix.
466
+
467
+ = 5.4.19 =
468
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) : Google Authenticator cloud fix.
469
+
470
+ = 5.4.18 =
471
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
472
+ * Added missing file
473
+
474
+ = 5.4.17 =
475
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
476
+ *Digimember Form Support
477
+ *Memberpress Form Support
478
+ *SMS Verification Support
479
+ *OTP Verification on WooCommerce Registration
480
+
481
+ = 5.4.16 =
482
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) : Quick form fix.
483
+
484
+ = 5.4.15 =
485
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) :
486
+ * Theme My Login plugin Support
487
+ * Ultimate Member Registration Support
488
+ * WooCommerce Registration Support
489
+ * Ultimate Member Redirect
490
+ * Restrict Content Pro Login and Registration
491
+
492
+ = 5.4.14 =
493
+ * Google Authenticator - Two Factor Authentication (2FA, MFA) : Performance improvement with fixes in Security Questions. And User Email verification and Phone Verification issues resolved.
494
+
495
+ = 5.4.13 =
496
+ * Google Authenticator - Two Factor Authentication (2FA, TFA) : Support Form Improvement.
497
+
498
+ = 5.4.11 =
499
+ * Google Authenticator - Two Factor Authentication (2FA, MFA) : Feedback Issue fix.
500
+
501
+ = 5.4.9 =
502
+ * Google Authenticator - Two Factor Authentication (2FA, TFA) : User Experience, new support form and Security disabled by default. Added New Methods for users to choose.
503
+
504
+ = 5.4.8 =
505
+ * Google Authenticator - Two Factor Authentication (2FA, OTP Verification) : Learning Management System support, Microsoft Authenticator and Duo Authenticator support and restrict account sharing add-on.
506
+
507
+ = 5.4.7 =
508
+ * Google Authenticator - Two Factor Authentication (2FA, SMS Verification) : Fixing warnings and adding minor changes in the plans.
509
+
510
+ = 5.4.6 =
511
+ * Google Authenticator - Two Factor Authentication (2FA) : Improving Google Authenticator and adding Payment options.
512
+
513
+ = 5.4.5 =
514
+ * Google Authenticator - Two Factor Authentication (2FA, OTP) : Security and MFA UI updates.
515
+
516
+ = 5.4.4 =
517
+ * Google Authenticator - Two Factor Authentication (2FA, TFA) : Two Factor : WooCommerce login page integration.
518
+
519
+ = 5.4.3 =
520
+ * Google Authenticator - Two Factor Authentication (2FA, MFA) : Session issue fix for customers using Two Factor.
521
+
522
+ = 5.4.2 =
523
+ * Google Authenticator - Two Factor Authentication (2FA, MFA) : Warning for cloud customer moving to on-premise Two factor
524
+
525
+ = 5.4.1 =
526
+ * Google Authenticator - Two Factor Authentication (2FA) : Headers sent issue is security firewall.
527
+
528
+ = 5.4.0 =
529
+ * Google Authenticator - Two Factor Authentication (2FA) : Two Factor FAQ Fix and OTP code convenience.
530
+
531
+ = 5.3.26 =
532
+ * Google Authenticator - Two Factor Authentication (2FA) : Two Factor On-premise FAQ update.
533
+
534
+ = 5.3.25 =
535
+ * Google Authenticator - Two Factor Authentication (2FA) : Two Factor On-premise support form.
536
+
537
+ = 5.3.24 =
538
+ * Google Authenticator - Two Factor Authentication (2FA) : On-premise two factor released with multiple user support for some authentication methods.
539
+
540
+ = 5.3.23 =
541
+ * Google Authenticator - Two Factor Authentication (2FA) : Scanner : Timing and caching issue fix.
542
+ * Disable 2fa on WooCommerce login.
543
+ * Login with Username only fix.
544
+
545
+ = 5.3.22 =
546
+ * Google Authenticator - Two Factor Authentication (2FA) : Antivirus : Fixing Cache issues and adding nonce.
547
+
548
+ = 5.3.21 =
549
+ * Google Authenticator - Two Factor Authentication (2FA) : Two Factor : Choice between Two factor and Security.
550
+
551
+ = 5.3.20 =
552
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti Malware : Fixing issue faced by users during scan.
553
+
554
+ = 5.3.19 =
555
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Giving users choice of two factor.
556
+
557
+ = 5.3.18 =
558
+ * Google Authenticator - Two Factor Authentication (2FA) : Antivirus and Firewall : Fix Scan.
559
+
560
+ = 5.3.17 =
561
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti-Virus : Improved Stop Scan.
562
+
563
+ = 5.3.16 =
564
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti-Virus : Stop Scan.
565
+
566
+ = 5.3.15 =
567
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti-Malware : schedule scan.
568
+
569
+ = 5.3.14 =
570
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti-Malware : Adding more signatures.
571
+
572
+ = 5.3.13 =
573
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : fix UI Issue and improving 2fa.
574
+
575
+ = 5.3.12 =
576
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : backup table fix.
577
+
578
+ = 5.3.11 =
579
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Limiting Firewall, Malware, backup and login security for users not needing it.
580
+
581
+ = 5.3.10 =
582
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Moved to Old WAF version minor issues..
583
+
584
+ = 5.3.9 =
585
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Web application Firewall Sql Injections report and monitoring.
586
+
587
+ = 5.3.8 =
588
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Malware Scanner Fix.
589
+
590
+ = 5.3.7 =
591
+ * Google Authenticator - Two Factor Authentication (2FA) : Security : Two factor login with username fix.
592
+
593
+ = 5.3.6 =
594
+ * Google Authenticator - Two Factor Authentication (2FA) : Anti virus zip file fix.
595
+
596
+ = 5.3.5 =
597
+ * Google Authenticator - Two Factor Authentication (2FA) : Backup URL Fix and space issue in google authenticator.
598
+
599
+ = 5.3.4 =
600
+ * Google Authenticator - Two Factor Authentication (2FA) : CSS fix for Malware Scanner, Security and firewall.
601
+
602
+ = 5.3.3 =
603
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor Malware Scanner issues fix.
604
+
605
+ = 5.3.2 =
606
+ * Google Authenticator - Two Factor Authentication (2FA) : File Changes.
607
+
608
+ = 5.3.1 =
609
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
610
+
611
+ = 5.3.0 =
612
+ * Google Authenticator - Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
613
+
614
+ = 5.2.6 =
615
+ * Google Authenticator - Two Factor Authentication (2FA) : Fixed conflict and filter issues.
616
+
617
+ = 5.2.5 =
618
+ * Google Authenticator - Two Factor Authentication (2FA) : Some warnings in remote posts.
619
+
620
+ = 5.2.4 =
621
+ * Google Authenticator - Two Factor Authentication (2FA) : Removed curl calls and unnecessary files.
622
+
623
+ = 5.2.3 =
624
+ * Google Authenticator - Two Factor Authentication (2FA) : Fix for some users facing issues in api calls.
625
+
626
+ = 5.2.2 =
627
+ * Google Authenticator - Two Factor Authentication (2FA) : Adding File Protection and Strong Password feature.
628
+ :
629
+ = 5.2.1 =
630
+ * Google Authenticator - Two Factor Authentication (2FA) : UI changes for description.
631
+
632
+ = 5.2.0 =
633
+ * Google Authenticator - Two Factor Authentication (2FA) : UI changes with more description.
634
+
635
+ = 5.1.22 =
636
+ * Google Authenticator - Two Factor Authentication (2FA) : UI Fixes.
637
+
638
+ = 5.1.21 =
639
+ * Google Authenticator - Two Factor Authentication (2FA) : Login Redirect.
640
+
641
+ = 5.1.20 =
642
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix.
643
+
644
+ = 5.1.19 =
645
+ * Google Authenticator - Two Factor Authentication (2FA) : Adding basic Security Features Monitoring, IP blocking and login transaction report.
646
+
647
+ = 5.1.18 =
648
+ * Google Authenticator - Two Factor Authentication (2FA) : Object access error for lower PHP versions.
649
+
650
+ = 5.1.17 =
651
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix and Documentation changes.
652
+
653
+ = 5.1.16 =
654
+ * Google Authenticator - Two Factor Authentication (2FA) : Login redirect fix.
655
+
656
+ = 5.1.15 =
657
+ * Google Authenticator - Two Factor Authentication (2FA) : UI Fixes.
658
+
659
+ = 5.1.14 =
660
+ * Google Authenticator - Two Factor Authentication (2FA) : Database Error Fix and Custom Redirect.
661
+
662
+ = 5.1.12 =
663
+ * Google Authenticator - Two Factor Authentication (2FA) : Removing redundant code.
664
+
665
+ = 5.1.11 =
666
+ * Google Authenticator - Two Factor Authentication (2FA) : Password Pattern Fix.
667
+
668
+ = 5.1.10 =
669
+ * Google Authenticator - Two Factor Authentication (2FA) : Javascript Error fixes.
670
+
671
+ = 5.1.9 =
672
+ * Google Authenticator - Two Factor Authentication (2FA) : Added visual tour and security fixes.
673
+
674
+ = 5.1.8 =
675
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for Validation.
676
+
677
+ = 5.1.7 =
678
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for DB error after Update.
679
+
680
+ = 5.1.6 =
681
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for DB error.
682
+
683
+ = 5.1.5 =
684
+ * Google Authenticator - Two Factor Authentication (2FA) : UI changes.
685
+
686
+ = 5.1.4 =
687
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes for redirect to login page issues.
688
+
689
+ = 5.1.3 =
690
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor bug fixes.
691
+
692
+ = 5.1.2 =
693
+ * Google Authenticator - Two Factor Authentication (2FA) : Changes in registration flow.
694
+
695
+ = 5.1.1 =
696
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor changes.
697
+
698
+ = 5.1.0 =
699
+ * Google Authenticator - Two Factor Authentication (2FA) : Added new user plans
700
+
701
+ = 5.0.17 =
702
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor Bug fix.
703
+
704
+ = 5.0.16 =
705
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes.
706
+
707
+ = 5.0.15 =
708
+ * Google Authenticator - Two Factor Authentication (2FA) : Added Google Authenticator option in the WP login page itself.
709
+
710
+ = 5.0.14 =
711
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug Fixes.
712
+
713
+ = 5.0.13 =
714
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix and code optimization.
715
+
716
+ = 5.0.12 =
717
+ * Google Authenticator - Two Factor Authentication (2FA) : Added GDPR Compliance.
718
+
719
+ = 5.0.11 =
720
+ * Google Authenticator - Two Factor Authentication (2FA) : Readme Update.
721
+
722
+ = 5.0.10 =
723
+ * Google Authenticator - Two Factor Authentication (2FA) : Added Proxy Setup feature.
724
+
725
+ = 5.0.9 =
726
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for "The loopback request to your site failed." error.
727
+
728
+ = 5.0.8 =
729
+ * Google Authenticator - Two Factor Authentication (2FA) : Changes for 2FA Free plugin for 1 user forever.
730
+
731
+ = 5.0.7 =
732
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for User Registration and other plugin conflicts in Dashboard.
733
+
734
+ = 5.0.6 =
735
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug Fix for existing customers who upgraded from 4.5.x version to versions between 5.0.0 and 5.0.4 and are facing issues with the Account Setup Tab.
736
+
737
+ = 5.0.5 =
738
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix for user entry during plugin update.
739
+
740
+ = 5.0.4 =
741
+ * Google Authenticator - Two Factor Authentication (2FA) : Workaround for errors during sending of OTP during registration.
742
+
743
+ = 5.0.3 =
744
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor fix for removing warings.
745
+
746
+ = 5.0.2 =
747
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
748
+
749
+ = 5.0.1 =
750
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fix.
751
+
752
+ = 5.0.0 =
753
+ * Google Authenticator - Two Factor Authentication (2FA) : New UI Interface, 2-factor authentication for Unlimited Users.
754
+ * This is a major release.
755
+
756
+ = 4.6.2 =
757
+ * Google Authenticator - Two Factor Authentication (2FA) : Plugin registration fixes and minor warning fixes.
758
+
759
+ = 4.6.1 =
760
+ * Google Authenticator - Two Factor Authentication (2FA) : Login error fix. Please skip version 4.5.9 and update to version 4.6.1
761
+
762
+ = 4.5.9 =
763
+ * Google Authenticator - Two Factor Authentication (2FA) : Bug fixes for customers who were getting redirected to the login page after the two factor authentication.
764
+
765
+ = 4.5.8 =
766
+ * Google Authenticator - Two Factor Authentication (2FA) : Tested up to 4.9.4 and Removed External links.
767
+
768
+ = 4.5.7 =
769
+ * Google Authenticator - Two Factor Authentication (2FA) : Minor bug fixes.
770
+
771
+ = 4.5.6 =
772
+ * Google Authenticator - Two Factor Authentication (2FA) : Tested up to Wordpress 4.9.
773
+
774
+ = 4.5.5 =
775
+ * Google Authenticator - Two Factor Authentication (2FA) : 404 bug fixes.
776
+
777
+ = 4.5.4 =
778
+ * Google Authenticator - Two Factor Authentication (2FA) : Better UI of Login Pages, Fixed Redirection issue. Fixed the error in the last version (4.5.3) for the customers who were getting undefined action errors.
779
+
780
+ = 4.5.3 =
781
+ * Google Authenticator - Two Factor Authentication (2FA) : Changed UI of the Login Pages, Redirect to Login Page bug fixes.
782
+
783
+ = 4.5.2 =
784
+ * Google Authenticator - Two Factor Authentication (2FA) : Readme Update: Description Update
785
+
786
+ = 4.5.1 =
787
+ * Google Authenticator - Two Factor Authentication (2FA) : Updated the new Google Authenticator App's link and the 'How to Setup Tab' tab.
788
+
789
+ = 4.5.0 =
790
+ * Google Authenticator - Two Factor Authentication (2FA) : Fix Google Authenticator configuration issue.
791
+
792
+ = 4.4.9 =
793
+ * Google Authenticator - Two Factor Authentication (2FA) : Added Alert Message for SMS Transactions only when authentication method is OTP over SMS.
794
+
795
+ = 4.4.8 =
796
+ * Google Authenticator - Two Factor Authentication (2FA) : Added Alert Message for SMS Transactions. Fixed Remember Device flow and confliction with themes. Added support for multiple instances of wordpress.
797
+
798
+ = 4.4.7 =
799
+ * Google Authenticator - Two Factor Authentication (2FA) : Updated the error message for 2 factor configuration.
800
+
801
+ = 4.4.6 =
802
+ * Google Authenticator - Two Factor Authentication (2FA) : Instructions for login in case user get locked out.
803
+
804
+ = 4.4.5 =
805
+ * Google Authenticator - Two Factor Authentication (2FA) : Fixed the issue of session variable on the login with username page.
806
+
807
+ = 4.4.4 =
808
+ * Google Authenticator - Two Factor Authentication (2FA) : Added alert messages for OTP over SMS usages.
809
+
810
+ = 4.4.3 =
811
+ * Google Authenticator - Two Factor Authentication (2FA) : Fixed the login flow for third party Apps that supports XML-RPC.
812
+
813
+ = 4.4 =
814
+ * Google Authenticator - Two Factor Authentication (2FA):
815
+ * Note: This is a very important update having altogether a new UI and compatibility with Limit Login Attempts. After updating, please do not logout from your admin dashboard. Try to login from another browser and if you face any issue , please contact us at info@xecurify.com
816
+ * Compatibility with Limit Login Attempts.
817
+ * New User Interface for login.
818
+
819
+ = 4.3.2 =
820
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Revised licensing cost for users.
821
+
822
+ = 4.3.1 =
823
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Compatible upto 4.7
824
+
825
+ = 4.3.0 =
826
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Updated miniOrange APIs.
827
+
828
+ = 4.2.9 =
829
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Tested up to WordPress 4.6.
830
+
831
+ = 4.2.7 =
832
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Session Warning fix in the last version for some of the users.
833
+
834
+ = 4.2.6 =
835
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Compatible with wordpress caching.
836
+
837
+ = 4.2.5 =
838
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Improved the session handler.
839
+
840
+ = 4.2.4 =
841
+ * Google Authenticator - Two Factor Authentication (2FA, MFA): Updated faq for limit login attempt type of plugins.
842
+
843
+ = 4.2.3 =
844
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
845
+ * Improved Error handling during Account Creation.
846
+
847
+ = 4.2.2 =
848
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
849
+ * Registration Flow fixes
850
+
851
+ = 4.2.1 =
852
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
853
+ * Change of status during login with phone flow and tested with WP 4.5
854
+
855
+ = 4.2.0 =
856
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
857
+ * Mark as tested on Wordpress 4.5
858
+
859
+ = 4.1.8 =
860
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
861
+ * Changed the location of images used for the demo. Now being loaded from the site having SSL certificate.
862
+
863
+ = 4.1.7 =
864
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
865
+ * Improved Error Handling for Remember Device.
866
+
867
+ = 4.1.6 =
868
+ * Google Authenticator - Two Factor Authentication ( 2 Factor ):
869
+ * Licensing Plan Updated.
870
+
871
+ = 4.1.5 =
872
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
873
+ * Added Forgot Password functionality for miniOrange customer admin.
874
+ * Added warning message for the users who are using lower version of php.
875
+ * Added functionality to change the customer email.
876
+
877
+ = 4.1.4 =
878
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
879
+ * Added an option for admin to enable or disable login for XML-RPC supported applications.
880
+
881
+ = 4.1.3 =
882
+ * Google Authenticator - Two Factor Authentication ( 2FA ):
883
+ * Fixed CSS Conflict with the plugins in the admin dashboard.
884
+ * More intuitive UI for WooCommerce login.
885
+ * Tested front-end login with themes like wordpress default theme,
886
+ customize theme,zerif-lite theme,accesspress store theme,ishop theme and many more.
887
+
888
+ = 4.1.2 =
889
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Google Authenticator for Windows phone
890
+ * Fixed CSS conflict with front-end of site if WooCommerce is not enabled.
891
+
892
+ = 4.1.1 =
893
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Adding Validation in choosing Security Questions (KBA).
894
+
895
+ = 4.1.0 =
896
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Features added.
897
+ multisite support
898
+ Custom login redirection
899
+ Authy 2-Factor Authentication as separate authentication method
900
+
901
+ = 4.0.6 = Google Authenticator - Two Factor Authentication Added multisite support and custom redirection after login feature.
902
+
903
+ = 4.0.5 = Google Authenticator - Two Factor Authentication Login into third party apps which support XML-RPC.
904
+
905
+ = 4.0.4 = Google Authenticator - Two Factor Authentication Added a check of KBA configuration from mobile login.
906
+
907
+ = 4.0.3 = Google Authenticator - Two Factor Authentication Added Support for Authy 2-Factor Authentication App.
908
+
909
+ = 4.0.2 = Google Authenticator - Two Factor Authentication Added a check for selection of unique questions during KBA setup .
910
+
911
+ = 4.0.1 = Bug Fix Google Authenticator - 2 Factor
912
+
913
+ = 4.0 =
914
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Features added.
915
+ * KBA as backup method.
916
+ * mobile browser support.
917
+ * more intuitive UI for WooCommerce login.
918
+
919
+ = 3.8 =
920
+ * Google Authenticator - Two Factor Authentication ( 2 Factor ): Bug Fix for roles.
921
+
922
+ = 3.7 =
923
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Activation of two factor role wise.
924
+
925
+ = 3.6 =
926
+ * Google Authenticator - Two Factor Authentication ( 2FA ): email verification in inline registration flow for all users.
927
+ More descriptive setup messages and UI changes.
928
+
929
+ = 3.5 =
930
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Provided mobile login support.
931
+
932
+ = 3.4 =
933
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Features added
934
+ * Inline registration flow for users.
935
+ * Security Questions (KBA) as additional method
936
+ * Alternate way of user identification in customer creation.
937
+ * premium customizable features.
938
+
939
+ = 3.3 =
940
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the issue of session for some versions of php.
941
+
942
+ = 3.2 =
943
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Fix for device-id compatibility.
944
+
945
+ = 3.1 =
946
+ * Google Authenticator - Two Factor Authentication ( 2 Factor ): Fix for 2FA ShortCode.
947
+
948
+ = 3.0 =
949
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Features added
950
+ * Google Authenticator.
951
+ * Device Id (Remember device).
952
+ * Choice given to admin to enable specific authentication methods for users.
953
+ * Two Factor support for WooCommerce theme.
954
+ * Short Code for various customized fronted login.
955
+ * More intuitive UI and descriptive instructions.
956
+
957
+ = 2.6 =
958
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the compatibility issues of user session with other security plugins.
959
+
960
+ = 2.5 =
961
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Fix the compatibility issues with All In One WP Security & Firewall plugin.
962
+
963
+ = 2.4 =
964
+ * Google Authenticator - Two Factor Authentication ( 2FA ): UI fixes for admin media library dashboard.
965
+
966
+ = 2.3 =
967
+ * Google Authenticator - Two Factor Authentication ( 2FA ): More descriptive setup messages, more intuitive UI.
968
+
969
+ = 2.2 =
970
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Fixed css issues for existing users
971
+
972
+ = 2.1 =
973
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Added support for multiple Two Factor Choices like OTP Over SMS, Phone Call Verification, Push Notification, Soft Token (like Google Authenticator Code), Email Verification, etc.
974
+
975
+ = 2.0 =
976
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Added login with password plus second factor feature.
977
+
978
+ = 1.8 =
979
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Added feature of different login form choice,test authentication and help for configuration and setup.
980
+
981
+ = 1.7 =
982
+ * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Modifying login screen adaptable to user's login form
983
+
984
+ = 1.6 =
985
+ * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): fetching 2 factor configuration when activating the plugin after deactivating it.
986
+
987
+ = 1.5 =
988
+ * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Login issues and password save issues resolved
989
+
990
+ = 1.4 =
991
+ * Bug Fixes Google Authenticator - Two Factor Authentication ( 2FA ): Authentication was not working on some version of php.
992
+
993
+ = 1.3 =
994
+ * Google Authenticator - Two Factor Authentication Bug Fixes
995
+
996
+ = 1.2 =
997
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Added 2 factor for all users along with forgot phone functionality.
998
+
999
+ = 1.1 =
1000
+ * Google Authenticator - Two Factor Authentication ( 2FA ): Added email ID verification during registration.
1001
+
1002
+ = 1.0.0 =
1003
  * First version of Google Authenticator - Two Factor Authentication ( 2FA ) plugin supported with mobile authentication for admins only.